[英]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.