我有一个问题可以解决:
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
的副本。
也许所有这些都可以通过求和的顺序来解释,但是这里到底发生了什么?
答案 0 :(得分:1)
a.copy()
方法等效于np.array(a)
。如docs所述,要获得具有相同内存布局的副本,应将order
指定为:
Y = X.copy(order='F')
诸如mean
或sum
之类的函数具有固有的浮点精度,这很可能是该内存布局错误的来源。使用订单“ K”,“ A”或“ C”(默认为numpy)时出现0错误