2017-02-06 4 views
1

ich diesen Code haben,Python Memory wenn Gebrauch numpy.empty

size_of_similarity_M =80000 
similarity_M = numpy.empty((size_of_similarity_M,size_of_similarity_M)) 

Und ich bin immer diese Fehlermeldung:

Traceback (most recent call last): 
File "<ipython-input-1337-7f9234015aae>", line 1, in <module> 
runfile('C:/Users/cp1/PythonScript/Try_replace_function.py', wdir='C:/Users/cp1/PythonScript') 
File "C:\Users\cp1\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile 
execfile(filename, namespace) 
File "C:\Users\cp1\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile 
exec(compile(f.read(), filename, 'exec'), namespace) 
File "C:/Users/cp1/PythonScript/Try_replace_function.py", line 14, in <module> 
similarity_M = numpy.empty((size_of_similarity_M,size_of_similarity_M)) 

MemoryError 

Wie ich Weg, dies in einem leicht lösen können, ohne Update alle Skript ? Natürlich für eine kleine Nummer in size_of_similarity_M, es funktioniert gut. Ich würde das Format similarity_M nicht ändern, da ich die Ausgabe dieser Matrix in anderen Skripten verwende.

+0

Erhalten Sie mehr Speicher. –

Antwort

1

numpy.arrays sollen in Erinnerung bleiben. Wenn Sie mit Matrizen arbeiten möchten, die größer als Ihr RAM sind, müssen Sie das umgehen. Es gibt mindestens zwei Ansätze, denen Sie folgen können:

  1. Versuchen Sie eine effizientere Matrixdarstellung, die jede spezielle Struktur ausnutzt, die Ihre Matrizen haben. Wie bereits erwähnt wurde, gibt es effiziente Datenstrukturen für dünn besetzte Matrizen (Matrizen mit vielen Nullen) wie scipy.sparse.csc_matrix.
  2. Ändern Sie Ihren Algorithmus für die Arbeit mit Submatrizen. Sie können nur die Matrixblöcke von der Festplatte lesen, die gerade in Berechnungen verwendet werden. Algorithmen, die auf Clustern ausgeführt werden, arbeiten normalerweise blockweise, da die Daten über verschiedene Computer verteilt und nur bei Bedarf weitergegeben werden.