[英]Is it possible to vectorize scipy fsolve?
我知道如何在 scipy 中使用 fsolve
from scipy.optimize import fsolve
import numpy as np
k=4
def equations(p):
x,y=p
eq_1 = x+y-k
eq_2 = x-y
return (eq_1,eq_2)
fsolve(equations, (0,0))
但是如果 k 是一个 numpy 数组,我不知道如何向量化这个函数。 (我可以在循环中为不同的 k 值执行此操作,但是如果会花费很多时间)。 是否有类似的解决方案:
from scipy.optimize import fsolve
import numpy as np
k=np.arange(10000)
def equations(p):
x,y=p
eq_1 = x+y-k
eq_2 = x-y
return (eq_1,eq_2)
fsolve(equations, (np.zeros(10000),np.zeros(10000)))
如果您有任何想法,非常感谢
编辑:你们中的一些人在下面给出的链接增加了计算时间,因为每一行都不需要独立。 例如,您可以测试这两个代码:
s=1000
#With array
t0=time.time()
k=np.arange(s)
def equations(p):
eq_1 = p**2-k
return (eq_1)
res=fsolve(equations, np.ones((s)))
print(time.time()-t0)
#With loop
t0=time.time()
res=np.zeros((s))
i=0
def equations(p):
eq_1 = p**2-i
return (eq_1)
while i<s:
res[i]=fsolve(equations, 1)[0]
i+=1
print(time.time()-t0)
结果
10.85175347328186
0.05588793754577637
有没有办法避免循环但使用矢量化功能保持良好的速度
不直接。
不过有 cython_optimize 接口, https: //docs.scipy.org/doc/scipy/reference/optimize.cython_optimize.html
因此,您可以使用 cython 并手动实现循环。 虽然 YMMV
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.