2016-11-20 17 views
0

我遇到了Numpy數組的問題,我偶然發現它,它讓我困惑。Python數字神祕地被比較圓整

我試圖使用array_equal

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

這回False比較2件陣列的當數是

[ 0.90980393 0.8392157 0.65098041] 
[ 0.90980393 0.8392157 0.65098041] 

以上就是我的兩個數組的打印。

然而,當我打印的各個元素一個似乎沒有理由

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

浮點數不表示一個確切的值。發生比較相等的兩個花車是巧合,而不是你應該測試或依賴的東西。 – 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