如何在 Python 中集成两个一维数据数组?
Posted
技术标签:
【中文标题】如何在 Python 中集成两个一维数据数组?【英文标题】:How do I integrate two 1-D data arrays in Python? 【发布时间】:2013-07-10 05:43:15 【问题描述】:我有两个表格数据数组,x 和 y,但我不知道生成数据的函数。我希望能够评估沿 x 轴任意点数据产生的线的积分。
与其在数据中插入分段函数然后尝试对其进行积分,但我遇到了麻烦,我可以使用什么东西来简单地通过评估数组来提供积分吗?
在搜索解决方案时,我看到了对 iPython 和 Pandas 的引用,但我无法找到这些包中有助于完成这项任务的部分。
如果无法简单地集成数组,您能否就处理此任务的最佳方式提供一些建议?
【问题讨论】:
【参考方案1】:Scipy has some nice tools to perform numerical integration.
例如,您可以使用scipy.integrate.simps
执行辛普森规则,您可以将其传递如下:
scipy.integrate.simps(y, x=None, dx=1, axis=-1, even='avg')
参数: y : array_like 要集成的数组。
x:array_like,可选 如果给定,则采样 y 的点。
dx:整数,可选 沿 y 轴的积分点间距。仅在 x 为无时使用。默认为 1。
轴:int,可选 要整合的轴。默认是最后一个轴。
even : ‘avg’, ‘first’, ‘str’, 可选
‘avg’:平均两个结果:1) 使用前 N-2 个区间 最后一个区间的梯形规则和 2) 使用最后 N-2 个区间和第一个区间的梯形规则。
‘first’:对前 N-2 个区间使用 Simpson 规则 最后一个区间的梯形规则。
‘last’ : 对最后 N-2 个区间使用 Simpson 规则 第一个区间的梯形规则。
所以你可以使用你的两个数组进行数值积分。
【讨论】:
如果您要处理多个数组/列表怎么办?如何执行集成? 你让我很开心,非常感谢......它就像魔术一样工作,节省了很多时间【参考方案2】: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 是您的两个数组。
【讨论】:
无法编辑您的帖子。梯形累积和的实际正确链接在这里:docs.scipy.org/doc/scipy/reference/generated/…以上是关于如何在 Python 中集成两个一维数据数组?的主要内容,如果未能解决你的问题,请参考以下文章