Numpy.mean возвращает разные результаты для массива и копии массива - PullRequest
0 голосов
/ 31 октября 2018

У меня есть проблема, которую я мог бы уменьшить до следующего:

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 голосов
/ 31 октября 2018

Метод a.copy() эквивалентен np.array(a). Как указано в документах , чтобы получить копию с тем же макетом памяти, вы должны указать order как:

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

Функции типа mean или sum имеют встроенную точность с плавающей запятой, которая, вероятно, является источником ошибки для этого макета памяти. Я получил 0 ошибку, используя порядок 'K', 'A' или 'C' (numpy по умолчанию)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...