numpy数组中的额外小数?

时间:2013-09-17 20:28:30

标签: python numpy zip

假设我有一个浮点列表和一个我希望压缩的numpy数组:

>>> import numpy as np
>>> n1 = [0.9, 1.1]
>>> n2 = np.array([0.9,1.1])
>>> zip(n1,n2)
    [(0.9, 0.90000000000000002), (1.1, 1.1000000000000001)]

为什么我得到所有这些小数?有没有办法让numpy浮点数表现得像python浮点数?

编辑: 似乎计算也受到numpy商店浮动方式的影响:

>>> nb1 = n2[1]+0.1
>>> nb1
    1.2000000000000002
>>> nb2 = nb1 - 1.2 #nb2 should be equal to 0
    2.2204460492503131e-16
>>> nb3 = np.asscalar(nb2)
>>> nb3
    2.2204460492503131e-16 #nb3 should be equal to 0
>>> type(nb3)
    float

1 个答案:

答案 0 :(得分:2)

python浮点数和numpy数组都可能是64位浮点数,但它们被“封装”在不同的对象中。差异可能是由于python浮点数和numpy浮点数的repr不同。

In [12]: n1[0]
Out[12]: 0.9

In [13]: n2[0]
Out[13]: 0.90000000000000002

In [14]: n1[0] == n2[0]
Out[14]: True

In [15]: type(n1[0])
Out[15]: float

In [16]: type(n2[0])
Out[16]: numpy.float64

同样的问题可能会触发a previous question。就个人而言,我认为这是一个numpy中的错误。