如何在scipy中集成numpy数组?
我有一个计算起来比较复杂的函数,这个函数接收一个单一的数字(标量),然后返回一个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()
有没有办法一次性对整个数组进行积分,还是说我必须一个元素一个元素地积分?我希望能避免第二种方法,因为计算数组中的单个元素并不简单。
3 个回答
-2
http://www.sagemath.org 这个网站可能提供一些不同的数值积分方法。
0
你想做的事情在数学上有点模糊。这个积分程序不知道你是想同时对几个标量函数进行积分(我理解你是这个意思),还是想做一些更复杂的事情,比如这些:http://en.wikipedia.org/wiki/Vector_calculus#Theorems。
我会这样做:先把这个计算量大的函数列成表,然后用插值的方法(可以用scipy.interp1d或者UnivariateSpline)来处理这些数据,再进行积分。
2
问题出现在这里:
abs(result - lastresult) > tol
result
和 lastresult
可能是 numpy 数组(而不是单个值)。所以上面的整个表达式实际上是在计算一个包含真假值的 数组,而不是单个的 True
或 False
。因此,当你把上面的表达式的结果和 (i <= divmax)
用 and
连接起来时,就会出现错误 数组中有多个元素的真假值是模糊的。
这个 ValueError 提出的建议是正确的。你应该把真假值的数组转换成一个单一的真假值。
example = numpy.array([True, True, True, False])
example.any()
>>> True
example.all()
>>> False
这样就能解决问题。