我正在尝试对我的矩阵(3241 x 12596)应用SVD,该矩阵是在进行一些文本处理后得到的(最终目标是执行潜在语义分析),但我无法理解为什么会出现这种情况,因为我的64位计算机有16GB RAM。一旦调用svd(self.A)
,它就会抛出一个错误。具体的错误如下:
Traceback (most recent call last):
File ".\SVD.py", line 985, in <module>
_svd.calc()
File ".\SVD.py", line 534, in calc
self.U, self.S, self.Vt = svd(self.A)
File "C:\Python26\lib\site-packages\scipy\linalg\decomp_svd.py", line 81, in svd
overwrite_a = overwrite_a)
MemoryError
所以我尝试使用
self.U, self.S, self.Vt = svd(self.A, full_matrices= False)
这次出现了以下错误:
Traceback (most recent call last):
File ".\SVD.py", line 985, in <module>
_svd.calc()
File ".\SVD.py", line 534, in calc
self.U, self.S, self.Vt = svd(self.A, full_matrices= False)
File "C:\Python26\lib\site-packages\scipy\linalg\decomp_svd.py", line 71, in svd
return numpy.linalg.svd(a, full_matrices=0, compute_uv=compute_uv)
File "C:\Python26\lib\site-packages\numpy\linalg\linalg.py", line 1317, in svd
work = zeros((lwork,), t)
MemoryError
这个矩阵是否太大,以至于Numpy无法处理?在不改变方法本身的情况下,有什么我可以做的吗?