2013-07-11 23 views
7

私は2つの表形式のデータ配列xとyを持っていますが、データを生成した関数は分かりません。私はx軸に沿った任意の点でデータによって生成された線の積分を評価できるようにしたい。Pythonで2つの1次元データ配列を統合するにはどうすればよいですか?

データに区分的関数を補間し、問題を統合しようとするのではなく、単純に配列を評価することで積分を提供できるものがありますか?

解決策を探すとき、私はiPythonとPandasへの参照を見ましたが、私はこのタスクを助けるパッケージの部分を見つけることができませんでした。

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

答えて

9

Scipy has some nice tools to perform numerical integration.

たとえば、あなたはシンプソンのルールを実行するためにscipy.integrate.simpsを使用することができ、あなたは、次のそれを渡すことができます:

scipy.integrate.simps(Y、X =なし、DX = 1 、軸= -1、偶数= 'avg')

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

x:array_like、任意 与えられた場合、yがサンプリングされるポイント。

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

軸:int、オプション 軸に沿って統合します。デフォルトは最後の軸です。

さえ:{ '平均'、 '第一'、 'STR'}、任意

'平均':平均2つの結果が:1) 最後に台形規則第N-2の間隔を使用し2)最初の間隔で最後のN-2間隔を台形ルールで使用する。

'first':最後の間隔で台形ルール を使用して最初のN-2インターバルでシンプソンのルールを使用します。

'last':最初の間隔で の台形則を持つ最後のN-2個のインターバルについてシンプソンのルールを使用します。

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

5

Scipyには、integration機能があります。

インテグレーションのためにcumulative sum of trapezoidsを使用する場合は、一連の点で最も適しています。

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

>>> 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つの配列です。

関連する問題