2016-06-24 42 views
2

我試圖將數據從hdf5數據集(f_one,在下面的屏幕截圖中)複製到一個numpy數組中,但是我發現我失去了一些精度。 enter image description here將數據從hdf5數據集傳輸到numpy數組時的精度損失

截圖(最後一個print語句)的最後一行應閱讀

subid2[0] == subid[1]

我只是在拍攝截圖之前意外刪除了2。輸出是正確的。如你所見,Python似乎認爲這兩個數字是完全一樣的 - 但是,當它們包含在一個numpy數組中時,我需要精確度來區分這兩個數字。 有誰知道我怎麼能得到這個精度?簡而言之,我怎樣才能得到最後的印刷陳述來產生假?

順便說以下內容:

f_one['SubhaloID'][0] == f_one['SubhaloID'][1] 

得到。所以當複製到numpy數組時,會有一些精度丟失。

回答

3

問題是您的輸入是整數類型,但是當創建一個numpy數組而不指定數據類型時,默認情況下最終將它們轉換爲浮點數。爲避免這種情況,請在爲此數據創建numpy數組時使用dtype=np.int64。另一種選擇是直接轉換現有的整型數組,所以它的條目類型是繼承的。

這裏是一個簡化的例子。

import numpy as np 
a = [30000000200000000, 30000000200000001] 
print(a[0]==a[1])   # False 
b = np.array(a) 
print(b[0]==b[1])   # False, direct conversion still has integers 
c = np.array([]) 
for i in range(2): 
    c = np.append(c, a[i]) 
print(c[0]==c[1])   # True, the entries are now floats 
d = np.array([], dtype=np.int64) 
for i in range(2): 
    d = np.append(d, a[i]) 
print(d[0]==d[1])   # False, the entries were declared as integers 

檢查使用type(c[0])type(d[0])看出區別的類型。

+0

謝謝!有效。 – billbert