python - 在 Numpy 中执行积分时出现 ValueError

标签 python python-3.x numpy lambda integration

我收到一个我无法解析的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(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()

关于如何克服这个错误有什么建议吗?谢谢。

最佳答案

正如您从侧栏问题中看到的那样,此错误是在需要标量 True/False 的上下文中使用数组的结果。

我的猜测是quad正在测试边界,pp针对inf。当你给它一个界限时,它工作得很好,例如0.5,但是当您给它一个边界数组 p 时,会产生此错误。 quad 旨在一次处理一组边界,而不是一个数组。

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

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

也就是说,迭代,一次对一个边界值执行积分。

关于python - 在 Numpy 中执行积分时出现 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41306483/

相关文章:

python - 一种从文件中读取 Butcher 画面的优雅且可读的方式

python - 如何根据条件替换 Pandas 数据框中任何位置的值?

python - Scikit-learn 交叉验证分数 : too many indices for array

python - 如何使用 os.walk() python 计算目录的大小?

Python Django 如何在 django models.py 中创建哈希字段

python - 如何在 python 3 中使用 raw_unicode_escape 编码打印字符串?

python - 如何使用 ffmpeg 在 python 中检查视频损坏?

Python:添加包含列元素成对乘积的列的最快方法

python - 在 cython 中调用 np.sqrt

Python:从 1+ 级别向下导入