我有一个数组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]在优化过程中不相互作用,因此应该能够通过矢量化或并行化来加速。我该怎么做?谢谢你
目前没有回答
相关问题 更多 >
编程相关推荐