Ich arbeite mit einer Reihe großer numpy Arrays, und als diese in letzter Zeit zu viel Speicher zu kauen begannen, wollte ich sie durch numpy.memmap
Instanzen ersetzen. Das Problem ist, dass ich ab und zu die Größe der Arrays ändern muss, und ich würde das am besten tun. Dies funktionierte recht gut mit gewöhnlichen Arrays, aber wenn man versucht, auf memaps zu meckern, werden die Daten möglicherweise geteilt, und selbst das Deaktivieren der Refecks hilft nicht.Größenanpassung von numpy.memmap Arrays
a = np.arange(10)
a.resize(20)
a
>>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
a = np.memmap('bla.bin', dtype=int)
a
>>> memmap([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
a.resize(20, refcheck=False)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-41-f1546111a7a1> in <module>()
----> 1 a.resize(20, refcheck=False)
ValueError: cannot resize this array: it does not own its data
Größenanpassung der zugrunde liegenden mmap-Puffer funktioniert einwandfrei. Das Problem besteht darin, wie diese Änderungen am Array-Objekt widergespiegelt werden. Ich habe diese workaround gesehen, aber leider wird die Größe des Arrays nicht geändert. Es gibt auch einige numpy documentation über die Größenänderung von mmaps, aber es funktioniert eindeutig nicht, zumindest mit der Version 1.8.0. Irgendwelche anderen Ideen, wie man die eingebauten Größenänderungskontrollen überschreibt?
Ich fühle mich wie ich etwas ... dieser Code läuft gut für mich nicht fehlen darf. Läuft es für dich? Wollen Sie das nicht tun? http://codepad.org/eEWmYBHZ –
@ three_pineapples Er möchte die Gesamtgröße des Arrays ändern - Ihr Code ändert es einfach –
@ali_m Ah, ich verstehe. Ich habe das von der Frage nicht verstanden, aber wie gesagt, ich dachte, ich hätte etwas übersehen! Danke für die Klärung –