2012-11-29 20 views
2

在我的ubuntu linux機器上的新鮮Python 2.7.3解釋器中執行以下代碼,在代碼之後顯示輸出結果。在列表到列表之後python中的異常小數位

import numpy as np 
p = [1/3., 1/2., 23/25., 1] 
q = np.array(p) 
r = list(q) 
print p; print q; print r 

輸出:

[0.3333333333333333, 0.5, 0.92, 1] 
[ 0.33333333 0.5   0.92  1.  ] 
[0.33333333333333331, 0.5, 0.92000000000000004, 1.0] 

我試圖以不同的方式找出原因P和R打印出來,但到目前爲止還沒有得到一個似是而非的理論。任何想法,爲什麼他們不同?

回答

3

他們打印出來的效果,因爲pfloatint列表,而rnumpy.float64列表:

In [23]: map(type, p) 
Out[23]: [float, float, float, int] 

In [24]: map(type, r) 
Out[24]: [numpy.float64, numpy.float64, numpy.float64, numpy.float64] 

這是因爲與NumPy數組是一個統一的類型,所以一切都被擴大至float64時您創建q

兩個列表中的值進行比較平等的,所以這純粹是在格式化的差異:

In [22]: p == r 
Out[22]: True 
1

我認爲這只是__repr__如何實現np.float64與python float的區別。

當您從numpy數組中創建一個列表時,您將這些元素(類型爲np.float64)放到列表中。因此,您實際上已將原始數據的類型從float轉換爲np.float64