如何在scipy中集成一个numpy数组?

时间:2010-11-05 20:58:22

标签: python arrays numpy scipy

我有一个相对昂贵的计算函数,给定一个标量,返回一个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 个答案:

答案 0 :(得分:1)

问题似乎在这里:

abs(result - lastresult) > tol

resultlastresult可能是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可以提供其他数值整合方式。