У вас матрица признаков X формы (1000, 3). Вы делаете центрирование столбцов: X_centered = X - X.mean(axis=0). Почему это работает без цикла for?
A
X.mean(axis=0) возвращает матрицу формы (1000, 3), повторяя строки X.B
X.mean(axis=0) возвращает одно число, которое вычитается из всех элементов матрицы.C
X.mean(axis=0) меняет X на месте, а вычитание после этого не делает ничего.D
X.mean(axis=0) возвращает вектор формы (3,), и broadcasting вычитает его из каждой строки.Правильный ответ. Среднее по
axis=0 возвращает вектор формы (3,), и NumPy через broadcasting вычитает его из каждой строки X.Разбор
X.mean(axis=0) сворачивает измерение строк и оставляет вектор по столбцам — для матрицы (1000, 3) получается форма (3,). При операции X - mean правила broadcasting автоматически растягивают вектор по строкам, и из каждой строки вычитается одно и то же среднее значение по соответствующему столбцу. Это и даёт центрированную матрицу той же формы (1000, 3). Никакой in-place мутации X mean() не делает, и вернуть отдельное число (а не вектор) могло бы только X.mean() без axis.
Проверь себя · 1/3разбор после ответа
Есть матрица продаж
sales формы (12, 5): строки — месяцы, столбцы — продукты. Как получить сумму продаж по каждому продукту за все месяцы?Ещё вопросы по теме «NumPy: основы»
- После `import numpy as np` вы сравниваете операции над списком Python `list` и массивом `np.ndarray`. Что верно для `lst * 2` и `arr * 2`, где `lst = [1, 2, 3]`, а `arr = np.array([1, 2, 3])`?
- Какое значение вернёт `arr.shape`, если `arr = np.array([[1, 2, 3], [4, 5, 6]])`?
- Что будет результатом выражения `arr + 10`, если `arr = np.array([1, 2, 3])`?
- Пусть `x = np.array([[1, 2], [3, 4]])`. Чему равен результат `np.sum(x, axis=0)`?
- Вы считаете метрику по большому массиву чисел и выбираете NumPy вместо Python `list`. Почему операции вроде `arr * 1.1` на `ndarray` обычно быстрее, чем цикл `for` по `list`?
- Все вопросы по «NumPy: основы» →