2016-07-13 3 views
4

浮動小数点数の行列があり、列と行の要約を取得しようとしています。 この行列は対称であるです。Python numpy行列の結果が一貫しない

>>> np.sum(n2[1,:]) #summing second row 
0.80822400592582844 
>>> np.sum(n2[:,1]) #summing second col 
0.80822400592582844 
>>> np.sum(n2, axis=0)[1] 
0.80822400592582899 
>>> np.sum(n2, axis=1)[1] 
0.80822400592582844 

異なる結果が得られます。どうして?

+1

少し関係のない注:最初の行(または列)はインデックス0であり、1ではない –

答えて

2

数値numpyは、精度が最大16桁のdoubleです。残りの桁は等しく、16位で違いが起こっているように見えます。この精度が必要ない場合は、丸め関数np.around()を使用するか、より高い精度を得るためにnp.longdoubleタイプを実際に試すことができます。いくつかのnumpyの機能は、私は信じて長いダブルスを受け入れないだろう、と余分な数字を切り捨て、二重にそれを投げます

>>> print np.finfo(np.double).precision 
>>> 15 

あなたがnp.finfoを使用して型の精度を確認することができます。 Numpy precision

+2

これが理由です。完全性のためには、浮動小数点数の合計が総和の次数に依存し、行列行または行列列の合計が異なる順序で発生する可能性があることに言及する必要があります(1つはソースコードを見なければなりません必ず)。 –

関連する問題