在numpy.array上意外反转

时间:2015-05-14 10:17:15

标签: python numpy

当使用numpy创建数组时,它会执行类似"反向循环"的操作。输入列表为[0.7],numpy.array输出为[0.69999999999999996]。为什么会这样?

>>> import numpy
>>> nparray = numpy.array([0.7])
>>> nparray[0]
// why is not 0.7 ?
0.69999999999999996

更新:

使用dtype = numpy.dtype(decimal.Decimal)有效,但我不明白为什么,任何想法? :

>>> import numpy,decimal
>>> nparray = numpy.array([0.7],dtype=numpy.dtype(decimal.Decimal))
>>> nparray[0]
0.7

1 个答案:

答案 0 :(得分:2)

它与二进制浮点数的工作方式有关:

https://docs.python.org/2/tutorial/floatingpoint.html#floating-point-arithmetic-issues-and-limitations

您输入的十进制浮点数仅由实际存储在机器中的二进制浮点数近似。

正如文档所解释的那样,这是二进制浮点的本质。避免这种情况的唯一方法是使用另一个数字表示法。