【发布时间】:2015-11-12 15:29:56
【问题描述】:
我需要运行一个函数来查找方程的根,该方程依赖于大量数据中的一个参数(实际方程要复杂得多,但形式上是等效的)。
def f(x):
return numpy.optimize.brentq(lambda y:numpy.exp(-abs(x)*y)-y,0,1)
矢量化方便吗?
我尝试使用 numpy.vectorize(f) 效果很好,但我认为它的速度与 python for 循环的速度相同。
是否有某种手动矢量化来更好地利用 numpy 数组计算的强大功能?
【问题讨论】:
-
numpy.vectorize是 for 循环的包装器,因此在您的情况下它是无用的。这里的问题是函数brentq只为标量编写,正如另一个topic 中所讨论的那样。正如那里所建议的那样,您最好使用简单的for列表理解。 -
我不确定它是否有帮助,但您可以尝试使用
scipy.optimize.fsolve,因为它接受矢量化输入。
标签: python numpy scipy vectorization mathematical-optimization