web-dev-qa-db-ja.com

Pythonで2つの1次元データ配列を統合するにはどうすればよいですか?

2つの表形式のデータ配列xとyがあり、データを生成した関数がわかりません。 X軸に沿った任意の点でデータによって生成された線の積分を評価できるようにしたい.

データに区分的関数を補間してそれを統合しようとするのではなく、問題がありますが、配列を評価することで積分を提供するだけの何かを使用できますか?

ソリューションを検索するとき、iPythonとPandasへの参照を見つけましたが、これらのパッケージの中でこのタスクに役立つ部分を見つけることができませんでした。

アレイを単純に統合する方法がない場合、このタスクを処理するための最良の方法についてアドバイスを提供できますか?

14
user2565770

Scipyには数値積分を実行するための素晴らしいツールがいくつかあります。

たとえば、scipy.integrate.simpsを使用してシンプソンのルールを実行し、次のように渡すことができます。

scipy.integrate.simps(y、x = None、dx = 1、axis = -1、even = 'avg')

パラメーター :
y:array_like統合される配列。

x:array_like、オプション指定された場合、yがサンプリングされるポイント。

dx:int、オプションのy軸に沿った積分点の間隔。 xがNoneの場合にのみ使用されます。デフォルトは1です。

axis:int、統合するオプションの軸。デフォルトは最後の軸です。

偶数:{‘avg’、 ‘first’、 ‘str’}、オプション

「avg」:2つの結果の平均:1)最初のN-2間隔を最後の間隔で台形規則で使用し、2)最後のN-2間隔を最初の間隔で台形規則で使用します。

「最初」:最初のN-2間隔にはシンプソンの規則を使用し、最後の間隔には台形規則を使用します。

「最後」:最後のN-2間隔にはシンプソンの規則を使用し、最初の間隔には台形規則を使用します。

したがって、2つの配列を使用して数値積分を行うことができます。

13
jh314

Scipyには 統合 機能があり、あなたを助けることができます。

台形の累積合計 を積分に使用する場合、これは一連の点におそらく最適です。

あなたはこれを行うことができます:

_>>> from scipy import integrate
>>> x = np.linspace(-2, 2, num=20)
>>> y = x
>>> y_int = integrate.cumtrapz(y, x, initial=0)
>>> plt.plot(x, y_int, 'ro', x, y[0] + 0.5 * x**2, 'b-')
>>> plt.show()
_

これにより、データがプロットされ、グラフィカルに表示されます。これは、統合呼び出しintegrate.cumtrapz(y, x, initial=0)です。ここで、xとyは2つの配列です。

8
Stephan