【问题标题】:ValueError when performing integration in Numpy在 Numpy 中执行集成时出现 ValueError
【发布时间】:2017-05-09 10:57:51
【问题描述】:

我收到了一个ValueError,我无法识别它。我正在尝试执行一个简单的集成任务,在lambda 函数上使用integrate.quad。代码如下:

import numpy as np
p = np.arange(0,1,1/1000)
x = 0
y = 1
z = 0.9
pdfl = lambda p: 2*(p-x)/((y-x)*(z-x)) if p<z else 2*(y-p)/((y-x)*(y-z))
h = lambda pp: integrate.quad(lambda p: p*pdfl(p), 0, pp)

在此代码中,pdfl 是(偏斜)三角形分布的概率密度函数。现在,这个函数适用于特定的数字,也就是说,h(0.5) 给了我们想要的答案。但是,我希望在p 中的每个元素上评估h。但是当我做h(p) 时,我得到了异常:

  File "d:\Anaconda3\lib\site-packages\scipy\integrate\quadpack.py", line 315, in quad
    points)

  File "d:\Anaconda3\lib\site-packages\scipy\integrate\quadpack.py", line 364, in _quad
    if (b != Inf and a != -Inf):

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

关于如何克服这个错误的任何建议?谢谢。

【问题讨论】:

    标签: python python-3.x numpy lambda integration


    【解决方案1】:

    从侧栏问题中可以看出,此错误是在预期标量 True/False 的上下文中使用数组的结果。

    我的猜测是quad 正在测试界限,ppinf。当你给它一个界限时它工作正常,例如0.5,但是当你给它一个边界数组时会产生这个错误,pquad 旨在一次使用一组边界,而不是数组。

    我认为你需要做类似的事情

    res = [h(pp) for pp in p]
    

    即迭代,一次对一个边界值执行积分。

    【讨论】:

      猜你喜欢
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 2021-04-29
      • 2014-05-21
      相关资源
      最近更新 更多