2014-01-17 72 views
3

我进行numpy的SVD A的内存错误

U, S, V = np.linalg.svd(A) 

形状:

(10000, 10000) 

由于大尺寸,它给我的内存错误:

U, S, V = np.linalg.svd(A, full_matrices=False) # nargout=3 
File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 1319, in svd 
    work = zeros((lwork,), t) 
    MemoryError 

那么我怎样才能找到我的矩阵svd?

+0

获得更多内存,或将数组存储在磁盘上。 – M4rtini

+0

我已经有4 GB的RAM了。另一种方式是什么? – sam

+0

4Gb内存不是那么多,48Gb是不是很昂贵,(假设你有64位?) – usethedeathstar

回答

1

一些小窍门: 关闭一切就是你的计算机上打开。通过将您不再需要的变量设置为None来消除程序中所有不必要的内存占用。假设你早些时候使用了一个大字典D进行了一些计算,但不需要它再设置D =无。尝试使用dtype = np.int32或dtype = np.float32初始化numpy数组以降低内存要求。

根据你需要的SVD你也可以看看python的scikit-learn软件包,它们支持许多分解方法,如PCA和SVD以及稀疏矩阵支持。