2013-12-20 26 views
3

如果我有一個字典的鍵是numpy float64數字,我如何通過鍵值訪問它們?numpy float64s作爲字典的鍵

>>> keys = np.arange(0, 0.5, 0.05, dtype=np.float64) 
>>> keys 
    array([..., 0.3 , ...]) 

    # The following creates a dicionary lookup table 
    # data[x] = exp(x) for all x in keys 

>>> data = {key: np.exp(key) for key in keys} 
>>> data[0.3] 
    KeyError: 0.3 
>>> data[np.float64(0.3)] 
    KeyError: 0.29999999999999999 
>>> data.keys() 
[..., 0.30000000000000004, ...] 

做numpy漂浮甚至有能力作爲字典的關鍵嗎?

+4

使用浮點數作爲詞典鍵是勇敢的... – seberg

+0

使用浮點數作爲詞典鍵在語義上如何考慮一個值與另一個值之間的映射。我所做的真實計算並不是每次你想要價值時你想要做的事情。有沒有更優雅的方式來創建地圖? – charmoniumQ

+0

爲什麼不把結果存儲爲數組? –

回答

0

從評論中,「我所做的真實計算不是每次你想要一個值時你想要做的事情,有沒有更好的方法來創建地圖?

這是一個標準問題,一般的解決方案被稱爲查找表或LUT。有很多實現,有和沒有numpy和scipy,你可以通過搜索找到。 Here's這是一個使用scipy插值方法的解決方案。

正如其他人所說,使用浮點數作爲字典鍵是有問題的。此外,使用LUT,您還可以在兩個預先計算的解決方案之間進行插值,這可以提高準確性等。