矢量化一些微妙的功能,以加快表演

2024-07-08 15:21:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数组Tmat(m,n),所有元素都应该在同一个函数myfunc(t)中优化。所以我在scipy.optimize或lmfit中定义了myfunc(t),并使用np.vectorize或循环来实现这个目标。像这样的一些玩具代码,Amat是一些形状为(m,n)的矩阵,x0是一些给定的常数

def myfunc(a,x):
    def loss(pars, x):
        vals = pars.valuesdict()
        t = vals['t']
        return (x-t)**2

    pars=lmfit.Parameters()
    pars.add('t',value=1.0)
    out=lmfit.minimize(loss,pars,args=(x,))
    return out.params['t'].value

# Using np.vectorize
vec_myfunc = np.vectorize(myfunc, excluded=['param'], signature='(),(m,n)->()')
tmat=vec_myfunc(Amat,x0)
# Using loops
    for i in range(m):
        for j in range(n):
             tmat[i,j]=myfunc(Amat[i,j],x0)

它非常非常慢The document of numpy说“提供矢量化功能主要是为了方便,而不是为了性能”。所以它并没有真正的矢量化函数。由于具有不同i,j的tmat[i,j]在优化过程中不相互作用,因此应该能够通过矢量化或并行化来加速。我该怎么做?谢谢你


Tags: 函数returnvaluedefnpmyfunc矢量化lmfit

热门问题