Я недавно применил решение this для усреднения каждых N строк матрицы. Хотя решение работает в целом, у меня были проблемы при применении к массиву 7x1. Я заметил, что проблема заключается в использовании оператора -=
. Для того, чтобы небольшой пример:Разница между a - = b и a = a - b в Python
import numpy as np
a = np.array([1,2,3])
b = np.copy(a)
a[1:] -= a[:-1]
b[1:] = b[1:] - b[:-1]
print a
print b
, который выводит:
[1 1 2]
[1 1 1]
Таким образом, в случае массива a -= b
производит другой результат, чем a = a - b
. Я думал до сих пор, что эти два пути точно такие же. В чем разница?
Почему метод, который я упоминаю для суммирования каждых N строк в матрице, работает, например. для матрицы 7x4, но не для массива 7x1?
Я предпочитаю этот ответ больше, чем принято в настоящее время. Он использует очень понятный язык, чтобы показать эффект модификации изменяемых объектов. Что еще более важно, в последнем абзаце прямо подчеркивается важность модификации места для перекрывающихся взглядов, что должно стать уроком, взятым из этого вопроса. – Reti43