在 Numpy 中执行集成时出现 ValueError
ValueError when performing integration in Numpy
我收到了一个 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()
关于如何克服这个错误有什么建议吗?谢谢。
正如您从边栏问题中看到的那样,此错误是在需要标量 True/False.
的上下文中使用数组的结果
我的猜测是 quad
正在测试边界,pp
反对 inf
。当你给它一个界限时它工作正常,例如0.5
,但是当你给它一个边界数组 p
时会产生这个错误。 quad
旨在一次处理一组边界,而不是数组。
我认为你需要做一些类似的事情
res = [h(pp) for pp in p]
即迭代,一次对一个绑定值进行积分。
我收到了一个 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()
关于如何克服这个错误有什么建议吗?谢谢。
正如您从边栏问题中看到的那样,此错误是在需要标量 True/False.
的上下文中使用数组的结果我的猜测是 quad
正在测试边界,pp
反对 inf
。当你给它一个界限时它工作正常,例如0.5
,但是当你给它一个边界数组 p
时会产生这个错误。 quad
旨在一次处理一组边界,而不是数组。
我认为你需要做一些类似的事情
res = [h(pp) for pp in p]
即迭代,一次对一个绑定值进行积分。