Ich habe eine riesige (30GB) ndarray Memory-Mapped:numpy.std auf memmapped ndarray nicht mit Memory
arr = numpy.memmap(afile, dtype=numpy.float32, mode="w+", shape=(n, n,))
Nachdem es mit einigen Werten füllen (was sehr fein geht - max Speichernutzung ist unter 1 GB) ich möchte die Standardabweichung berechnen:
print('stdev: {0:4.4f}\n'.format(numpy.std(arr)))
Diese Linie mit MemoryError
kläglich versagt.
Ich bin nicht sicher, warum das fehlschlägt. Ich wäre dankbar für Tipps, wie man diese auf speichereffiziente Weise berechnet?
Umwelt: Venv + Python3.6.2 + NumPy 1.13.1
Vielen Dank für die Umsetzung jedoch mit NumPy 'sum' ist numerisch instabil und gerade bei großen Matrizen es nicht wirklich kläglich ([siehe Frage SO] (https: //stackoverflow.com/questions/33004029/is-numpy-sum-implemented-in-such-a-way-that-numerical-errors-are-avoided)). Die korrigierte (wenn auch langsamere) Version unten. – sophros