Wie viel Speicher in einem Array? Ist RAM ein begrenzender Faktor?

7

Ich benutze numpy, um ein Würfel-Array mit Seiten der Länge 100 zu erstellen, das also 1 Million Einträge enthält. Für jeden der Millionen Einträge füge ich eine 100x100-Matrix ein, deren Einträge aus zufällig generierten Zahlen bestehen. Ich verwende dafür den folgenden Code:

%Vor%

Ich habe erwartet, dass dies eine Weile dauert, aber da 10 Milliarden Zufallszahlen generiert werden, bin ich nicht sicher, ob mein Computer überhaupt damit umgehen kann. Wie viel Speicher würde ein solches Array aufnehmen? Würde RAM ein begrenzender Faktor sein, d. H. Wenn mein Computer nicht genug RAM hat, könnte er das Array tatsächlich nicht erzeugen?

Wenn es auch einen effizienteren Code zu implementieren gibt, würde ich mich über Tipps freuen:)

    
aensm 28.06.2012, 21:51
quelle

2 Antworten

17

Ein paar Punkte:

  • Die Größe im Speicher von numpy Arrays ist einfach zu berechnen. Es ist einfach die Anzahl der Elemente mal die Datengröße plus ein kleiner konstanter Overhead. Wenn Ihr cube.dtype beispielsweise int64 ist und 1.000.000 Elemente enthält, wird 1000000 * 64 / 8 = 8,000,000 bytes (8Mb) benötigt.
  • Wie @Gabe jedoch feststellt, benötigen 100 * 100 * 1.000.000 Doubles ungefähr 80 Gb .
  • Dies wird nicht dazu führen, dass irgendetwas "kaputt geht", per se, aber die Operationen werden lächerlich langsam sein, weil alle swapping Ihr Computer muss tun.
  • Ihre Schleifen werden nicht das tun, was Sie erwarten. Anstatt das Element in cube zu ersetzen, wird element = matrix einfach die Variable element überschreiben und die cube unverändert lassen. Das gleiche gilt für entry = random.rand() * 100 .
  • Stattdessen: Ссылка
David Wolever 28.06.2012, 21:59
quelle
2

für den "inneren" Teil Ihrer Funktion, schauen Sie sich das numpy.random Modul an

%Vor%     
Phil Cooper 28.06.2012 22:39
quelle

Tags und Links