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