Python Numpy平均值函数舍入误差
我觉得这很奇怪。有人能告诉我这是怎么回事吗Python Numpy平均值函数舍入误差,python,numpy,average,Python,Numpy,Average,我觉得这很奇怪。有人能告诉我这是怎么回事吗 >>>a = [1,0,1] >>>np.mean(a) 0.66666666666666663 >>>2.0/3 0.6666666666666666 np.mean(a)输出末尾的3是怎么回事?为什么它不像下面的那一行那样是6或7(四舍五入时)?这只是两种不同类型的不同字符串表示的一种情况: In [17]: a = [1, 0, 1] In [18]: mean(a) Out[
>>>a = [1,0,1]
>>>np.mean(a)
0.66666666666666663
>>>2.0/3
0.6666666666666666
np.mean(a)
输出末尾的3是怎么回事?为什么它不像下面的那一行那样是6或7(四舍五入时)?这只是两种不同类型的不同字符串表示的一种情况:
In [17]: a = [1, 0, 1]
In [18]: mean(a)
Out[18]: 0.66666666666666663
In [19]: type(mean(a))
Out[19]: numpy.float64
In [20]: 2.0 / 3
Out[20]: 0.6666666666666666
In [21]: type(2.0 / 3)
Out[21]: float
In [22]: mean(a).item()
Out[22]: 0.6666666666666666
他们比较平等:
In [24]: mean(a) == 2.0 / 3
Out[24]: True
In [25]: mean(a).item() == 2.0 / 3
Out[25]: True
现在可能是阅读和的时候了。为什么会有反对票?至少解释一下。这是完全合理的…除非你真的没有读过这个问题…@Brian这个问题在这个论坛上已经被回答了很多次了。@Ophion所以投反对票,评论说这是个骗局,并链接到一个。当被愚弄者没有出现在搜索或相关列表中时,为什么人们要“点击并运行”投票否决一个新用户?@Brain你必须问他们,但这是一个谷歌很容易回答的问题,它本质上是对SO问题的检查。@Ophion:这不是标准的
OMG,0.1+0.2=0.3000004
您每天会看到三次,这似乎是一个让我吃惊的有效问题。python浮点值也应该是64位的,但numpy的打印方式仍然有点奇怪。@BasSwinckels不确定我是否理解您的论点。你是说,因为它们都是浮点类型,具有64位表示,所以它们应该repr
相同,即使它们在类型层次结构中是不同的类型?我知道它们是不同的类型,具有不同的repr,但都应该包装相同的float64值。在这种情况下,似乎没有努力让repr显示它真正的类型,所以我只是觉得有点奇怪,他们没有使用相同的算法来创建字符串表示。我猜这已经在NumPy ML上讨论过了。我真的没有时间研究它,但我敢打赌你会在那里找到更多的信息。