scipy最小化大型数组

问题描述

我有一个形状为X的数组(1109,1109),并且我试图根据给定的数组最小化成本函数f。我尝试使用不同的方法尝试像scipy.optimize.fmin()scipy.optimize.minimize()这样的scipy最小化函数,但是总是收到内存错误MemoryError: Unable to allocate 11.0 TiB for an array with shape (1229882,1229881) and data type float64。似乎scipy最小化功能需要二次存储复杂度。
成本函数看起来像f(X): np.linalg.norm(K @ X @ X.T @ K.T),具有不变的矩阵K,其大小与X相同
对于Stacktrace,使用scipy.optimize.fmin()scipy.optimize.minimize()以外的其他BFGS方法会导致相同的错误

---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
 in 
----> 1 result = optimize.minimize(loss_,X.flatten(),method='Nelder-Mead')

~\anaconda3\lib\site-packages\scipy\optimize\_minimize.py in minimize(fun,x0,args,method,jac,hess,hessp,bounds,constraints,tol,callback,options)
    596 
    597     if meth == 'nelder-mead':
--> 598         return _minimize_neldermead(fun,**options)
    599     elif meth == 'powell':
    600         return _minimize_powell(fun,**options)

~\anaconda3\lib\site-packages\scipy\optimize\optimize.py in _minimize_neldermead(func,maxiter,maxfev,disp,return_all,initial_simplex,xatol,fatol,adaptive,**unkNown_options)
    543         N = len(x0)
    544 
--> 545         sim = numpy.zeros((N + 1,N),dtype=x0.dtype)
    546         sim[0] = x0
    547         for k in range(N):

MemoryError: Unable to allocate 11.0 TiB for an array with shape (1229882,1229881) and data type float64

有人知道解决这个问题的方法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)