J'ai un énorme (30 Go) de mémoire mappée ndarray:numpy.std sur ndarray memmapped échoue avec MemoryError
arr = numpy.memmap(afile, dtype=numpy.float32, mode="w+", shape=(n, n,))
Après le remplir avec des valeurs (qui va très bien - utilisation de la mémoire max est ci-dessous 1 Go) Je veux calculer l'écart-type:
print('stdev: {0:4.4f}\n'.format(numpy.std(arr)))
Cette ligne échoue lamentablement avec MemoryError
.
Je ne sais pas pourquoi cela échoue. Je serais reconnaissant pour les conseils sur la façon de calculer ceux-ci d'une manière efficace sur le plan de la mémoire?
Environnement: venv + Python3.6.2 + NumPy 1.13.1
Nous vous remercions de la mise en œuvre mais en utilisant NumPy 'sum' est numériquement instable et précisément dans le cas des grandes matrices il échoue lamentablement vraiment ([voir SO question] (https: //stackoverflow.com/questions/33004029/is-numpy-sum-implemented-in-such-a-way-that-numerical-errors-are-avoided)). La version corrigée (quoique plus lente) ci-dessous. – sophros