小编典典

应用SVD会立即引发内存错误吗?

python

我试图将SVD应用到经过一些文本处理(最终目的是执行潜在语义分析)后获得的矩阵(3241 x
12596)上,但我无法理解为什么会发生这种情况,因为我的64位计算机具有16GB内存。那一刻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无法处理?在此阶段,我是否可以做一些事情而无需更改方法本身?


阅读 117

收藏
2020-12-20

共1个答案

小编典典

显然,事实证明,由于@Ferdinand Beyer,我没有注意到我在64位计算机上使用的是32位版本的Python。

使用64位版本的Python并重新安装所有库即可解决此问题。

2020-12-20