如何解决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 举报,一经查实,本站将立刻删除。