Python 对于数组和数组副本,Numpy.mean返回不同的结果

Python 对于数组和数组副本,Numpy.mean返回不同的结果,python,numpy,precision,Python,Numpy,Precision,我有一个问题可以归结为以下几点: import numpy as np X = np.array([[98489.46, 98491.95000000001, 98496.93000000001, 98499.42000000001, 98504.40000000001, 98506.89000000001, 98511.87000000001, 98514.36000000002, 98519.34000000001, 98521.83], [0, 0, 0, 0, 0, 0, 0, 0,

我有一个问题可以归结为以下几点:

import numpy as np

X = np.array([[98489.46, 98491.95000000001, 98496.93000000001,
98499.42000000001, 98504.40000000001, 98506.89000000001,
98511.87000000001, 98514.36000000002, 98519.34000000001,
98521.83], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], order='F')

Y = X.copy()
assert(np.array_equal(X, Y))

print(X.mean(axis=1)[0] - X[0, :].mean())

print(Y.mean(axis=1)[0] - Y[0, :].mean())
第一个案例打印了
-1.4551915228366852e-11
,我发现这是出乎意料的。它基本上说,第一行的平均值不同于第一行的平均值

第二种情况打印的是
0
,这是独立结果的预期结果,但我没有预料到这与第一种情况不同,因为
Y
只是
X
的一个(内存连续的,我猜)副本

也许所有这些都可以用求和的顺序来解释,但这里到底发生了什么?

a.copy()方法相当于
np.array(a)
。如中所述,要获得具有相同内存布局的副本,应将
顺序指定为:

Y = X.copy(order='F')

mean
sum
这样的函数具有固有的浮点精度,这可能是该内存布局的错误源。使用顺序“K”、“A”或“C”(numpy默认值)时,我得到了0个错误。

可能是不同的表达式导致平均值以不同的顺序计算。浮点运算不能保证是正确的,所以不同的运算顺序会产生不同的结果。另一个例子:比较
X[0,:].mean()
X[0,::-1].mean()
。谢谢!实际上,
Z=X.copy(order='F')
的行为类似于
X
,而
Y=X.copy()
的行为则不同。