У вас матрица признаков 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 вычитает его из каждой строки X.Правильный ответ. Broadcasting позволяет применять вектор (например, средние по столбцам) ко всем строкам матрицы.
Разбор
При axis=0 среднее считается по строкам для каждого столбца, поэтому X.mean(axis=0) имеет форму (3,). NumPy умеет вычитать этот вектор из матрицы формы (1000, 3) по правилу broadcasting: вектор «растягивается» на все строки. Это типичный приём нормализации признаков в аналитике.
Проверь себя · 1/3разбор после ответа
Есть матрица продаж
sales формы (12, 5): строки — месяцы, столбцы — продукты. Как получить сумму продаж по каждому продукту за все месяцы?Ещё вопросы по теме «NumPy: основы»
- После `import numpy as np` вы сравниваете операции над Python `list` и NumPy `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: основы» →