2

在我的 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 的打印结果不同,但到目前为止还没有一个合理的理论。关于它们为什么不同的任何想法?

4

2 回答 2

3

它们的打印方式不同,因为p是 和 的列表floatintr是 的列表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
于 2012-11-29T15:39:35.447 回答
1

我认为这只是 a与 a python__repr__实现方式的区别。 np.float64float

当您从 numpy 数组中创建一个列表时,您将元素(使用 type np.float64)放入列表中。因此,您实际上已将原始数据的类型从 转换floatnp.float64.

于 2012-11-29T15:39:13.067 回答