2016-11-20 19 views
0

Numpy配列に問題があり、私はそれを見つけて混乱しました。Python数字が不思議に丸められています

私は数字が上

[ 0.90980393 0.8392157 0.65098041] 
[ 0.90980393 0.8392157 0.65098041] 

は、2つの配列の私のプリントであるとき、これはFalseを返してarray_equal

np.array_equal(updated_image_values[j][k],np.array(initial_means[i])) 

を使って、配列の2部を比較しようとしています。

しかし、私は1つの理由はない

print updated_image_values[j][k][0] #0.909804 
print initial_means[i][0] #0.90980393 

のための丸められているように見える個々の要素を印刷するときに、これらの個々の要素を比較したとき、そして、明らかにそれはFalse

print updated_image_values[j][k][0]==initial_means[i][0] #False 

返し誰もが理由を説明することができますPythonは比較を間違っていますし、数字を丸めている明白な理由もありません。

+0

浮動小数点数は、正確な値を表しているわけではありません。同じように比較される2つの浮動小数点は、偶然であり、テストする必要があるものではありません。 – jasonharper

+1

'np.set_printoptions(precision = 16)'を発行し、配列を再度比較します;-)。 – user7138814

+0

'set_printoptions'が動作します! – cjds

答えて

0

updated_image_valuesにはいくつかの操作が行われているとします。数字は何授業ですか?
あなたが見ているのは、「丸め」ではないことです。クラスの__str__または__repr__の機能と関係があります。リストを印刷するときに0.90980393が表示されているということは、要素が実際に0.909804に丸められていないことを意味します。試してください"{0:.10f}".format(updated_image_values[j][k][0])
比較の場合、おそらく浮動小数点演算の値が、許容範囲外であるarray_equalの値を変更することがわかります。 iscloseinsteadを試してみてください。

+0

'isclose'は動作しますが、' set_printopts'はもっと正しいようです – cjds

関連する問題