我有兩個大的(432 * 136 * 136 * 46)'numpy.ndarray'H1和H2,其中包含對應於兩個模擬的高度值。當H1和H2具有相同的高度時,我想用1生成一個數組,當它們不具有相同的高度時,則爲0。然後,我想知道我選擇了多少個元素,所以我想計算這個矩陣元素的總和。這裏是我的代碼:Numpy sum函數返回1.67772e + 07
H1=np.concatenate([np.around(files1[i].hrtm()[:,0:45,:,:]/h) for i in range(0,files1.__len__())])
H2=np.concatenate([np.around(files2[i].hrtm()[:,0:45,:,:]/h) for i in range(0,files2.__len__())])
diff=np.absolute(H1-H2)
diff[diff==0.]=np.float64(-1.)
diff[diff!=-1]=np.float64(0.)
diff=diff*diff
print np.sum(diff)
這裏是我的輸出,這是永遠不變的,不依賴於數據:
1.67772e+07
經過一番研究,我讀了它與最大浮動的大小。我嘗試了幾種格式,用int,float,np.float32或者什麼都替換np.float64,並且它們都給出了相同的結果。
你知道如何才能擁有真實的號碼嗎?
它與單精度浮點數的**精度**相關:在值2^24之上,加1不會產生任何影響,因爲它是絕對的rbed。 –
@rth:這是一個奇怪的斷言。 'diff == 0.'將給出一個數組,其中包含與True和False在其他地方相對應的位置。它將按照OP的意圖工作。 –
@MarkDickinson請注意,「如果'diff'是一個浮點數組」在我的評論。我錯過了它被轉換爲帶有'np.around'的整數的事實。否則,你最終可能會遇到四捨五入的問題,比如檢查'2.2 * 3.0 == 6.6',它將在python中計算爲False。 – rth