Zazwyczaj pracuję z ogromnymi symulacjami. Czasami muszę obliczyć środek masy zestawu cząsteczek. Zauważyłem, że w wielu sytuacjach średnia wartość zwracana przez numpy.mean() jest niepoprawna. Mogę zrozumieć, że jest to spowodowane nasyceniem akumulatora. Aby uniknąć tego problemu, mogę podzielić sumowanie na wszystkie cząstki w małym zestawie cząsteczek, ale jest niewygodne. Czy ktoś ma pomysł, jak rozwiązać ten problem w elegancki sposób?Niepoprawna wartość średnia?
Tylko dla piking się swoją ciekawość, następujący przykład produkować coś podobnego do tego, co obserwujemy w moich symulacji:
import numpy as np
a = np.ones((1024,1024), dtype=np.float32)*30504.00005
sprawdzając max i wartości min, otrzymasz:
a.max()
30504.0
a.min()
30504.0
jednak wartość średnia wynosi:
a.mean()
30687.236328125
można dowiedzieć się, że coś jest nie tak tutaj. Nie dzieje się tak podczas używania dtype = np.float64, więc powinno być fajnie rozwiązać problem z pojedynczą precyzją.
Jeśli którakolwiek z tych odpowiedzi rozwiązała Twój problem, powinieneś ją zaakceptować. – tacaswell