我有一个相对昂贵的计算函数,给定一个标量,返回一个numpy.array()对象。当我尝试使用scipy.integrate.romberg
将此函数与标量参数集成时,我从用于确定收敛的条件中获取scipy内部的错误:
Traceback (most recent call last):
File "wqc.py", line 148, in <module>
H_cycle = (m.pi / wt) * scipy.integrate.romberg(H_if, 0, m.pi / wt)
File "/usr/lib/python2.6/site-packages/scipy/integrate/quadrature.py", line 471, in romberg
while (abs(result - lastresult) > tol) and (i <= divmax):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
有没有办法一次整合整个数组,还是需要逐个元素集成?我想避免第二种解决方案,因为没有简单的方法来计算只是数组的一个元素。
答案 0 :(得分:1)
问题似乎在这里:
abs(result - lastresult) > tol
result
和lastresult
可能是numpy.arrays(而不是单个值)。因此,上面的整个表达式正在评估真值的数组,而不是单个True
/ False
。因此,当您使用and
(i <= divmax)
上述表达式的结果时,您会收到错误The truth value of an array with more than one element is ambiguous.
。 ValueError的建议是恰当的。您应该将真值的数组转换为单个真值。
example = numpy.array([True, True, True, False])
example.any()
>>> True
example.all()
>>> False
这将解决问题。
答案 1 :(得分:0)
你想要做的是纯粹的数学意义上的含糊不清。集成例程无法知道您是否想要同时集成多个标量函数(据我所知,您已经完成了这些函数),或者如果您正在执行类似这些动物之一的事情:{{3} }
我会在这里做什么我会将昂贵的函数制成表格,插入它(使用scipy.interp1d或UnivariateSpline),并整合这些函数。
答案 2 :(得分:-2)
http://www.sagemath.org可以提供其他数值整合方式。