我在Pandas read_csv函数中遇到了一些浮点问题。在我的调查,我发现这一点:Numpy float64 vs Python float
In [15]: a = 5.9975
In [16]: a
Out[16]: 5.9975
In [17]: np.float64(a)
Out[17]: 5.9974999999999996
为什么是Python内置float
和Python中给出不同的结果np.float64
类型?我认为他们都是C++双打?
我在Pandas read_csv函数中遇到了一些浮点问题。在我的调查,我发现这一点:Numpy float64 vs Python float
In [15]: a = 5.9975
In [16]: a
Out[16]: 5.9975
In [17]: np.float64(a)
Out[17]: 5.9974999999999996
为什么是Python内置float
和Python中给出不同的结果np.float64
类型?我认为他们都是C++双打?
>>> numpy.float64(5.9975).hex()
'0x1.7fd70a3d70a3dp+2'
>>> (5.9975).hex()
'0x1.7fd70a3d70a3dp+2'
它们是相同的数字。他们的代表有什么不同? Python本机类型使用“理性”表示,而NumPy类型使用精确表示。
通过表示,你是指它被打印到屏幕的方式? – mchangun 2014-11-24 06:16:05
通过'__repr __()'方法或其C级等价物,是的。 – 2014-11-24 06:18:01
一个真正的*精确的*表示实际上是5.99749999999999960920149533194489777088165283203125,这是您在计算浮点文字'5.9975'时得到的64位浮点数的精确十进制值。 – 2016-03-17 12:19:20
还要注意,Pandas'read_csv'函数使用了它自己的超快速字符串到float的转换,它*不是正确舍入的。因此,在输出一个值并重新读取它之后,恢复的值最终可能会与原始值不同,为1或2个ulps。 – 2014-11-24 08:41:59