如何在Python中集成两个1-D数据阵列?

时间:2013-07-11 19:44:45

标签: python arrays integration interpolation

我有两个列表数据数组x和y,我不知道生成数据的函数。我希望能够在沿x轴的任何点评估数据产生的线的积分。

不是将分段函数插入数据然后尝试集成我遇到的问题,而是我可以使用的东西只是通过评估数组来提供积分?

在搜索解决方案时,我看到了对iPython和Pandas的引用,但我无法找到有助于完成此任务的那些软件包的部分。

如果没有办法简单地集成数组,你能提供一些关于处理这项任务的最佳方法的建议吗?

2 个答案:

答案 0 :(得分:9)

Scipy has some nice tools to perform numerical integration.

例如,您可以使用scipy.integrate.simps执行simpson规则,您可以传递以下内容:

  

scipy.integrate.simps(y,x =无,dx = 1,轴= -1,偶数='平均')

     

参数:
  y:array_like   要集成的数组。

     

x:array_like,可选   如果给定,则采样y的点。

     

dx:int,可选   沿y轴的积分点的间距。仅在x为None时使用。默认值为1。

     

axis:int,可选   Axis沿着它整合。默认是最后一个轴。

     

甚至:{'avg','first','str'},可选

     

'avg':平均两个结果:1)使用第一个N-2区间   最后一个区间的梯形规则和2)在第一个区间使用最后的N-2区间和梯形规则。

     

'first':使用Simpson规则获得第一个N-2区间   最后一个区间的梯形规则。

     

'last':使用Simpson的规则获得最后一个N-2区间   第一个区间的梯形规则。

因此,您可以使用两个数组进行数值积分。

答案 1 :(得分:7)

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是你的两个数组。