【问题标题】:How do I integrate two 1-D data arrays in Python?如何在 Python 中集成两个一维数据数组?
【发布时间】:2013-07-10 05:43:15
【问题描述】:

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

与其在数据中插入分段函数然后尝试对其进行积分,但我遇到了麻烦,我可以使用什么东西来简单地通过评估数组来提供积分吗?

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

如果无法简单地集成数组,您能否就处理此任务的最佳方式提供一些建议?

【问题讨论】:

    标签: python arrays integration interpolation


    【解决方案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 是您的两个数组。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2020-09-12
    • 1970-01-01
    • 2017-08-13
    • 2022-11-03
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多