矢量化python中的优化

时间:2016-11-01 06:52:56

标签: python numpy optimization scipy vectorization

我正在尝试向量化一个优化(根查找)问题,我需要找到一个整数的根。我没有找到任何与矢量化一起使用的良好集成函数,所以我编写了一个用于集成的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

我愿意采用完全不同的方法来做到这一点。

0 个答案:

没有答案