我正在尝试向量化一个优化(根查找)问题,我需要找到一个整数的根。我没有找到任何与矢量化一起使用的良好集成函数,所以我编写了一个用于集成的tradezoidal方法。以下代码试图对输入数组 d 的长度 N = 300000 <的根进行矢量化(对于每个d有不同的根)查找问题/ strong>而不是为 d 的不同值使用循环。
from scipy import optimize as op
import numpy as np
N=300000
d=np.random.rand(N)
def f(z): # vectorized version- depends on d as well
return ((1-2*z)*np.exp(-d[:,None]/z))/(((1-z)**(2+d[:,None]))*(z**(2-d[:,None])))
def trap(func,start,end,num): #trapezoidal approach to integration
diff=(end-start)/(num-1.0)
g=np.arange(num)
xlinear=diff[:,None]*g+start[:,None]
fx=func(xlinear)
return np.trapz(fx,xlinear)
def integral(p):
start=np.zeros_like(p) +0.001
return trap(f,start,p,100)
root=op.fsolve(integral,0.75*np.ones_like(d))
但是,上面的代码对我来说是一个内存错误。
Traceback (most recent call last):
...
File "H:...my_module.py", line 344, in
root=op.fsolve(integral,0.75*np.ones_like(a))
File "C:..scipy\optimize\minpack.py", line 140, in fsolve
res = _root_hybr(func, x0, args, jac=fprime, **options)
File "C:...scipy\optimize\minpack.py", line 209, in _root_hybr
ml, mu, epsfcn, factor, diag)
MemoryError
我愿意采用完全不同的方法来做到这一点。