我试图将SVD应用到经过一些文本处理(最终目的是执行潜在语义分析)后获得的矩阵(3241 x 12596)上,但我无法理解为什么会发生这种情况,因为我的64位计算机具有16GB内存。那一刻svd(self.A)被调用时,它抛出一个错误。准确的错误如下:
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无法处理?在此阶段,我是否可以做一些事情而无需更改方法本身?
显然,事实证明,由于@Ferdinand Beyer,我没有注意到我在64位计算机上使用的是32位版本的Python。
使用64位版本的Python并重新安装所有库即可解决此问题。