在我的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打印出来的方式不同,但到目前为止还没有一个合理的理论。关于他们为什么不同的任何想法?
答案 0 :(得分:3)
他们的打印方式不同,因为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数组属于统一类型,所以当您创建float64
时,所有内容都会扩展为q
。
两个列表中的值比较相等,所以它纯粹是格式化的差异:
In [22]: p == r
Out[22]: True
答案 1 :(得分:1)
我认为这对于__repr__
与np.float64
的{{1}}的实现方式存在差异。
当您从numpy数组中创建一个列表时,您将获取元素(类型为float
)并将它们放入列表中。因此,您实际上已将原始数据的类型从np.float64
转换为float
。