¿Aplicando SVD arroja un error de memoria instantáneamente?

Estoy tratando de aplicar SVD en mi matriz (3241 x 12596) que se obtuvo después de un procesamiento de texto (con el objective final de realizar el Análisis semántico latente) y no puedo entender por qué sucede esto ya que mi máquina de 64 bits tiene 16GB RAM. En el momento en svd(self.A) se llama svd(self.A) produce un error. El error preciso se da a continuación:

 Traceback (most recent call last): File ".\SVD.py", line 985, in  _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 

Así que traté de usar

 self.U, self.S, self.Vt = svd(self.A, full_matrices= False) 

Y esta vez, arroja el siguiente error:

 Traceback (most recent call last): File ".\SVD.py", line 985, in  _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 

¿Se supone que esta matriz es tan grande que Numpy no puede manejar y hay algo que puedo hacer en esta etapa sin cambiar la metodología en sí?

Sí, el parámetro full_matrices para scipy.linalg.svd es importante: su entrada es altamente deficiente en rango (rango máximo de 3.241), por lo que no desea asignar la matriz completa de 12,596 x 12,596 para V

Más importante aún, es probable que las matrices provenientes del procesamiento de texto sean muy dispersas . El scipy.linalg.svd es denso y no ofrece SVD truncado, lo que resulta en a) un rendimiento trágico yb) un montón de memoria desperdiciada.

Eche un vistazo al paquete sparseSVD de PyPI, que funciona sobre la entrada dispersa y puede solicitar los factores K principales solamente. O pruebe scipy.sparse.linalg.svd , aunque no es tan eficiente y solo está disponible en las versiones más nuevas de scipy.

O, para evitar los detalles importantes, use un paquete que haga LSA eficiente de manera transparente, como gensim .

Al parecer, gracias a @Ferdinand Beyer, no noté que estaba usando una versión de Python de 32 bits en mi máquina de 64 bits.

El uso de una versión de Python de 64 bits y la reinstalación de todas las bibliotecas resolvieron el problema.