私は通常、巨大なシミュレーションを扱っています。場合によっては、一連の粒子の重心を計算する必要があります。多くの状況で、numpy.mean() によって返される平均値が間違っていることに注意しました。アキュムレータの飽和が原因であることがわかります。この問題を回避するために、すべての粒子の合計を小さな粒子のセットに分割することができますが、それは不快です。この問題をエレガントな方法で解決する方法を知っている人はいますか?
好奇心を刺激するためだけに、次の例は、私のシミュレーションで観察したものと同様のものを生成します。
import numpy as np
a = np.ones((1024,1024), dtype=np.float32)*30504.00005
最大値と最小値を確認すると、次のようになります。
a.max()
30504.0
a.min()
30504.0
ただし、平均値は次のとおりです。
a.mean()
30687.236328125
ここで何かがおかしいことがわかります。これは dtype=np.float64 を使用する場合には発生しないため、単精度の問題を解決するとよいでしょう。