微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scipy最小化大型数组

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