PythonのNumPyで複合台形公式を使って数値積分する方法
指定した軸に沿って複合台形公式(composite trapezoidal rule)を用いて積分を行うには、numpy.trapz() メソッドを使用します。x が指定された場合は、その要素の並び順に従って積分が実行されます(要素は自動的にソートされません)。このメソッドは、n次元配列 y を単一の軸に沿って台形公式で近似した定積分の値を返します。y が1次元配列の場合、結果は float 型となり、次元が1より大きい場合は「n-1」次元の配列として返されます。
各パラメータの意味は以下のとおりです。
- 第1引数 y: 積分対象となる入力配列。
- 第2引数 x:
yの各値に対応するサンプル点。xが None の場合、サンプル点は間隔dxで等間隔に配置されているものとみなされます(デフォルトは None)。 - 第3引数 dx:
xが None のときのサンプル点間の間隔(デフォルトは 1)。 - 第4引数 axis: 積分を実行する軸。
なお、NumPy 2.0 以降では trapz() は非推奨となっており、代わりに同じ機能を持つ numpy.trapezoid() の使用が推奨されています。
手順
まず、必要なライブラリをインポートします。
import numpy as np
array() メソッドを使ってNumPy配列を作成します。ここでは int 型の要素を含む配列を用意しました。
arr = np.array([20, 35, 57, 70, 85, 120])
作成した配列を表示します。
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))コード例
import numpy as np
# array()メソッドでNumPy配列を作成
# int型の要素を追加
arr = np.array([20, 35, 57, 70, 85, 120])
# 配列を表示
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))実行結果
Our Array... [ 20 35 57 70 85 120] Dimensions of our Array... 1 Datatype of our Array object... int64 Result (trapz)... 317.0
このように、等間隔のサンプル点に対して np.trapz(arr) を呼び出すだけで、台形公式による定積分の近似値(この例では 317.0)を簡単に求めることができます。
-
Python NumPyのrindex()メソッドで部分文字列が見つかる最大インデックスを返す方法
Python NumPyのnumpy.char.rindex()メソッドを使用すると、文字列の中で指定した部分文字列(sub)が見つかった位置のうち、最も大きい(右端の)インデックスを返すことができます。このメソッドはint型の要素を持つ出力配列を返し、部分文字列が見つからない場合はValueErrorが発生します。引数の構成は以下のとおりです。第1引数: 検索対象となる入力配列第2引数: 検索する部分文字列なお、rindex()は文字列の右側から検索を行うため、同じ部分文字列が複数回出現する場合でも、その中で最も後ろ側(インデックスが最大)の位置が返される点が特徴です。手順1. 必要なライブ
-
Pythonでビット配列を使って配列内の重複を検出する方法
n個の数値からなる配列があるとします。nは最大でも32,000であり、配列には重複した要素が含まれている可能性がありますが、nの具体的な値は分かりません。ここで、使用できるメモリがわずか4キロバイトしかないという制約のもと、配列内のすべての重複をどのように表示すればよいでしょうか?例えば、入力が [2, 6, 2, 11, 13, 11] の場合、2と11がそれぞれ複数回出現しているため、出力は [2, 11] となります。なぜビット配列なのか通常、重複検出にはハッシュセットなどを使用しますが、32,000個の整数をそのまま格納すると必要なメモリが制限を超えてしまいます。そこで各数値を「1ビッ