Python numpy顺序依赖吗?

Python numpy顺序依赖吗?,python,numpy,floating-point,Python,Numpy,Floating Point,我注意到numpy.mean()和numpy.var()的输出随着其参数顺序的变化而变化 这只与浮点数的精度有关,否则我会错过什么 import numpy l1 = [1.0, 0.69, 0.65, 0.7, 0.64, 0.8] l2 = [1.0, 0.7, 0.69, 0.65, 0.64, 0.8] assert sorted(l1) == sorted(l2) print repr(numpy.mean(l1)) print repr(numpy.mean(l2)) pri

我注意到
numpy.mean()
numpy.var()
的输出随着其参数顺序的变化而变化

这只与浮点数的精度有关,否则我会错过什么

import numpy

l1 = [1.0, 0.69, 0.65, 0.7, 0.64, 0.8]
l2 = [1.0, 0.7, 0.69, 0.65, 0.64, 0.8]

assert sorted(l1) == sorted(l2)

print repr(numpy.mean(l1))
print repr(numpy.mean(l2))

print repr(numpy.var(l1))
print repr(numpy.var(l2))
这里是我获得的输出:

0.7466666666666667
0.74666666666666659
0.015522222222222222
0.015522222222222224
NumPy使用(在本例中)64位浮点。不能以无限精度表示所有数字。 此数据类型可以容纳15位有效数字。这意味着你的号码中的最后一个数字是没有意义的。 因此,要比较我们的数字,请使用
numpy.allclose

>>> numpy.allclose(numpy.mean(l1), numpy.mean(l2))
True

浮点加法是交换的,但不是结合的,所以加法的顺序很重要。对于一个更极端的例子,请尝试
l1=[1e17,3.0,-1e17]
l2=[1e17,-1e17,3.0]
,它们分别计算了
0.0
1.0
的平均值。(顺便说一句,这两个结果将无法通过Mike Müller提到的
allclose
测试。)