[英]Anomalous decimal places in python after list-to-numpy-to-list
在我的ubuntu linux機器上的全新Python 2.7.3解釋器中執行以下代碼,將在代碼之后顯示輸出。
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的打印方式不同,但是到目前為止還沒有一個合理的理論。 關於它們為何不同的任何想法?
它們的打印方式不同,因為p
是float
和int
的列表,而r
是numpy.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數組是統一類型,因此在創建q
時,所有內容都會擴展為float64
。
兩個列表中的值比較相等,因此在格式上完全不同:
In [22]: p == r
Out[22]: True
我認為這只是在如何區別__repr__
為實現np.float64
與蟒蛇float
。
當您從numpy數組中創建列表時,將元素(類型為np.float64
)放入列表中。 因此,您實際上已經將原始數據的類型從float
為np.float64
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.