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

时间:2018-10-31 14:02:06

标签: 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, 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的副本。

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

1 个答案:

答案 0 :(得分:1)

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

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

诸如meansum之类的函数具有固有的浮点精度,这很可能是该内存布局错误的来源。使用订单“ K”,“ A”或“ C”(默认为numpy)时出现0错误