PythonとNumPyのtrapz()メソッドで複合台形公式により軸0に沿って積分する方法
指定した軸に沿って複合台形公式を用いて数値積分を行うには、numpy.trapz()メソッドを使用します。xが指定された場合は、その要素の並び順に従って順次積分が実行されます(要素は自動的にソートされません)。このメソッドは、台形公式によって単一の軸に沿って近似計算された、n次元配列「y」の定積分を返します。
戻り値の形状は入力配列の次元によって変わります。「y」が1次元配列の場合、結果はfloat型のスカラー値となり、「y」がn次元(n > 1)の場合、結果は「n-1」次元の配列となります。
主なパラメータ
- y(第1引数):積分対象となる入力配列です。
- x(第2引数):yの各値に対応するサンプル点です。省略した場合(None)、サンプル点は等間隔dxで配置されているものとみなされます。デフォルトはNoneです。
- dx(第3引数):xがNoneのときのサンプル点間の間隔です。デフォルトは1です。
- axis(第4引数):積分を実行する軸を指定します。
手順
まず、必要なライブラリをインポートします。
import numpy as np
arange()メソッドを使ってnumpy配列を作成し、reshape()で3×3の2次元配列に変換します。要素はint型です。
arr = np.arange(9).reshape(3, 3)
配列を表示して内容を確認します。
print("Our Array...\n",arr)配列の次元数を確認します。
print("\nDimensions of our Array...\n",arr.ndim)配列のデータ型を取得します。
print("\nDatatype of our Array object...\n",arr.dtype)複合台形公式を用いて軸0(列方向)に沿って積分するには、numpy.trapz()メソッドにaxis=0を指定して呼び出します。
print("\nResult (trapz)...\n",np.trapz(arr, axis = 0))コード例
import numpy as np
# arange()メソッドでnumpy配列を作成(int型の要素)
arr = np.arange(9).reshape(3, 3)
# 配列を表示
print("Our Array...\n",arr)
# 次元数を確認
print("\nDimensions of our Array...\n",arr.ndim)
# データ型を確認
print("\nDatatype of our Array object...\n",arr.dtype)
# 複合台形公式で軸0に沿って積分
print("\nResult (trapz)...\n",np.trapz(arr, axis = 0))実行結果
Our Array... [[0 1 2] [3 4 5] [6 7 8]] Dimensions of our Array... 2 Datatype of our Array object... int64 Result (trapz)... [ 6. 8. 10.]
この例では、各行の値が台形公式に基づいて集計され、軸0(縦方向)に沿った積分結果として [6. 8. 10.] が出力されています。なお、NumPy 2.0以降ではnp.trapzは非推奨となり、代わりに同じ機能を持つnp.trapezoidの使用が推奨されている点にも留意してください。
-
PythonのNumPyで複合台形公式を使って軸1に沿って積分する方法
複合台形公式(composite trapezoidal rule)を使用して、指定した軸に沿って数値積分を行うには、numpy.trapz()メソッドを使用します。xが指定された場合、積分はその要素の並び順に従って実行され、要素は自動的にソートされません。このメソッドは、台形公式によって単一の軸に沿って近似したn次元配列「y」の定積分を返します。「y」が1次元配列の場合、結果はfloat型となり、「n」が1より大きい場合は「n-1」次元の配列が返されます。 なお、NumPy 2.0以降ではnp.trapzは非推奨となっており、代わりに同じ機能を持つnp.trapezoidの使用が推奨されてい
-
Pythonでビット配列を使って配列内の重複を検出する方法
n個の数値からなる配列があるとします。nは最大でも32,000であり、配列には重複した要素が含まれている可能性がありますが、nの具体的な値は分かりません。ここで、使用できるメモリがわずか4キロバイトしかないという制約のもと、配列内のすべての重複をどのように表示すればよいでしょうか?例えば、入力が [2, 6, 2, 11, 13, 11] の場合、2と11がそれぞれ複数回出現しているため、出力は [2, 11] となります。なぜビット配列なのか通常、重複検出にはハッシュセットなどを使用しますが、32,000個の整数をそのまま格納すると必要なメモリが制限を超えてしまいます。そこで各数値を「1ビッ