2017-02-06 1 views
3

Ich bin schreibgeschützt von einem 70 GB Memmap-Array, aber nur ~ 300 MB davon. Von this antwortend, verwendet memmap nicht wirklich physischen Speicher, also dachte ich, ich sollte das benötigte Array für bessere Leistung in den physischen Speicher kopieren.Was passiert, wenn ein numpy memmap Array kopiert wird?

Allerdings, wenn ich ein Memmap und np.info() das kopierte Array np.copy() ist, ist die Klasse eine Memmap. Unabhängig von dieser Spekulation sehe ich bei Verwendung eines kopierten Arrays mehr Speicherauslastung und Leistungsverbesserung.

Verwendet eine kopierte memmap physischen Speicher? Oder geht hinter der Bühne noch etwas anderes vor? Sieht es so aus, als ob ich physischen Speicher für das kopierte Array verwende, und mein Computer täuscht mich wie immer?

+0

Ich denke, dass mmap und Ihre memmap verschiedene Dinge sind – YOU

+1

Ja, sie sind anders, aber 'numpy.memmap' verwendet' mmap', so ist die Frage immer noch relevant. –

Antwort

3

numpy.memmap ist eine Unterklasse von numpy.ndarray. memmap überschreibt nicht die ndarray.copy() Methode, so dass die Semantik von ndarray.copy() nicht berührt wird. Eine Kopie in neu zugewiesenen Speicher wird tatsächlich gemacht. Aus mehreren Gründen versucht ndarray.copy(), den Typ des zurückgegebenen Objekts gleich zu halten, wenn eine Unterklasse verwendet wird. Es macht weniger Sinn für numpy.memmap aber viel mehr Sinn für andere Unterklassen wie numpy.matrix.

Im Falle numpy.memmap, die mmap -spezifische in der Kopie-Attribute sind auf None gesetzt, so wird das kopierte Array ein numpy.ndarray außer wie verhalten, dass seine Art numpy.memmap noch sein wird. Überprüfen Sie das Attribut ._mmap sowohl in der Quelle als auch in der zu überprüfenden Kopie.

+0

+1 für die Antwort mit Beweis! '._mmap' einer tatsächlichen memmap gibt mir' ', aber' ._mapap' eines kopierten Arrays gibt mir 'None'. –

Verwandte Themen