首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅具有正面积的numpy数组中的积分

仅具有正面积的numpy数组中的积分
EN

Stack Overflow用户
提问于 2013-10-29 00:37:31
回答 1查看 4.6K关注 0票数 6

我希望能够使用numpys trapz函数计算以下积分

代码语言:javascript
运行
复制
numpy.trapz([-1, 1]) # returns 0

但我不想允许出现负值区域。有没有一种有效的方法来做到这一点,或者我必须寻找最小点并手动转换数组?

numpy.trapz(numpy.abs([-1, 1]))有意义吗?

EN

回答 1

Stack Overflow用户

发布于 2013-10-29 00:54:15

如果您想放弃对集成区域的负面贡献,我们可以简单地获取np.trapz source code并重写它:

代码语言:javascript
运行
复制
def abstrapz(y, x=None, dx=1.0):
    y = np.asanyarray(y)
    if x is None:
        d = dx
    else:
        x = np.asanyarray(x)
        d = np.diff(x)
    ret = (d * (y[1:] +y[:-1]) / 2.0)
    return ret[ret>0].sum()  #The important line

快速测试:

代码语言:javascript
运行
复制
np.trapz([-1,0,1])
0.0

abstrapz([-1,0,1])
0.5

如果您只想避免y小于零的区域,只需将小于零的'y‘值掩码为零:

代码语言:javascript
运行
复制
arr = np.array([-2,-1,0.5,1,2,1,0,5,3,0])
np.trapz(arr)
10.5

arr[arr<0] = 0
np.trapz(arr)
12.5

这不是最好的方法,但它是一个很好的近似值。如果这是你的意思,我可以更新这个。

我不得不稍微修改一下你的例子,因为根据定义,trapz([-1,1])总是返回0。我们确实以这种方式删除了一些功能,如果您需要在多维数组上执行此操作,则可以很容易地将其添加回来。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19640296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档