私はpythonとnumpyに新しいので、この問題が非常に初歩的であれば私を許してください! Iが負の値の配列を有している(ソートされ):Pythonのlong(> 20millionの要素)配列の合計numpy
Iは、分布の標準偏差を見つけるために、その重複した(ただし、正の値を有する)にこの配列を追加する必要が>>>neg
[ -1.53507843e+02 -1.53200012e+02 -1.43161987e+02 ..., -6.37326136e-1 -3.97518490e-10 -3.73480691e-10]
>>>neg.shape
(12922508,)
がゼロに平均化されます。だから私は、次の操作を行います。
>>>pos=-1*neg
>>>pos=pos[::-1] #Just to make it look symmetric for the display bellow!
>>>total=np.hstack((neg,pos))
>>>total
[-153.50784302 -153.20001221 -143.1619873 ..., 143.1619873 153.20001221 153.50784302]
>>>total.shape
(25845016,)
これまでのところ、すべてが非常に良いですが、奇妙なことは、この新しい配列の和がゼロではないということです。
>>>numpy.sum(total)
11610.6
標準偏差はでもありませんすべて私が期待していたものに近いが、私はその問題の根本がこれと同じであると推測する。なぜ合計がゼロにならないのか?
このメソッドを小さな配列に適用すると、例えば[-5、-3、-2]の場合、合計はゼロになります。だから私は問題は配列の長さにあると思う(20million以上の要素)。この問題に対処する方法はありますか?
私がこれに助けてくれる人がいれば、私は最も感謝しています。
'math.fsum(total)'は '0'を返しますか? – jfs
はい、あります!ワオ!!!あなたはnumpyを一切使用してはならないということを意味しています。私はnumpyが配列作業に最適なツールだと誤解していました!!!しかし、http://docs.python.org/py3k/library/math.html#module-mathを見ると、標準偏差を計算するためのツールはありません。あなたは何を提案しますか? – makhlaghi
いいえ 'fsum()'は、あなたのコードが集計中に精度を失うこと以外のいくつかのバグを持っていないという健全性チェックのためのものです。標準偏差については、['numpy.std()'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.std.html)を使用することができます。 'np.std(total、dtype = np.float64)'を試してください。 – jfs