python 2 numpy.linspace数字表示

时间:2019-02-26 11:58:27

标签: python numpy numbers representation

我正在尝试使用linspace相等地间隔一个封闭的间隔。我的代码如下:

for i in np.linspace(-1,2,6,endpoint=True):
    print(i)

及其下一个输出:

-1.0
-0.4
0.19999999999999996
0.7999999999999998
1.4
2.0

我的问题是,为什么linspace在第三和第四位返回0.199999999999999960.7999999999999998。据我了解,linspace会将起始值增加一个有理数,从而可以精确地表示所有值。

我是对的还是我完全误解了?感谢您的提前帮助!

1 个答案:

答案 0 :(得分:0)

几乎每天使用的float值都不十分精确。这就是float的本质。但是大多数时候它们都非常接近我们实际认为的值,我们甚至都没有注意到,因为python在打印前会将数字四舍五入。您可以使用decimal模块查看(至少更精确的)“实际”值:

from decimal import Decimal
for i in np.linspace(-1,2,6,endpoint=True):
    print(Decimal(i))

输出:

-1
-0.40000000000000002220446049250313080847263336181640625
0.1999999999999999555910790149937383830547332763671875
0.79999999999999982236431605997495353221893310546875
1.399999999999999911182158029987476766109466552734375
2

如您所见,除了第一个和最后一个值,它们都不是精确的。您注意到的两个值恰好有点不准确。