NumPy: основы: вопросы для собеседования (часть 4)
NumPy — фундамент для числовых вычислений в Python и основа pandas, scipy, sklearn. На собеседовании спрашивают про ndarray, broadcasting, векторизацию, индексирование массивов и разницу в производительности с чистым Python. Понимание NumPy показывает, что аналитик готов работать с данными эффективно.
Вопросы 16–20 из 20
16Пусть `x = np.array([[1, 2], [3, 4]])`. Чему равен результат `np.sum(x, axis=0)`?
AСкаляр 10
B`np.array([3, 7])`
C`np.array([2, 3])`
D`np.array([4, 6])`
Ответ: `axis=0` суммирует по строкам, то есть считает сумму в каждом столбце.
В 2D массиве `axis=0` означает агрегацию «вниз по строкам», результат — по каждому столбцу. Для `x = [[1, 2], [3, 4]]` суммы по столбцам равны 1+3 и 2+4, то есть `np.array([4, 6])`. Понимание `axis` критично для корректных метрик.
17Пусть `arr = np.array([[10, 20, 30], [40, 50, 60]])`. Что вернёт выражение `arr[:, 1]`?
A`np.array([20, 50])`
B`np.array([10, 40])`
C`np.array([30, 60])`
DСкаляр 20
Ответ: Срез `arr[:, j]` выбирает весь столбец `j` из 2D массива.
В записи `arr[:, 1]` двоеточие `:` означает «все строки», а индекс 1 означает второй столбец. Поэтому возвращается столбец `[20, 50]` как 1D `ndarray`. Это базовый навык индексации/срезов для аналитических матриц признаков.
18У вас матрица признаков `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: вектор «растягивается» на все строки. Это типичный приём нормализации признаков в аналитике.
19Какое из сложений `a + b` вызовет ошибку broadcasting из-за несовместимых форм?
A`a` формы (5,), `b` — скаляр (например, 2).
B`a` формы (2, 3), `b` формы (1, 3).
C`a` формы (3, 1), `b` формы (4,).
D`a` формы (2, 3), `b` формы (2,).
Ответ: Для broadcasting размеры должны совпадать или один из них должен быть 1 (сравнение идёт справа налево).
Broadcasting сравнивает формы по осям справа налево. Для (2, 3) и (2,) сравниваются последние оси: 3 и 2 — они не равны и ни одна не равна 1, значит формы несовместимы и выражение `a + b` упадёт с ошибкой. Умение проверять совместимость форм экономит много времени при отладке.
20Пусть `a = np.array([[1], [2], [3]])` и `b = np.array([10, 20, 30, 40])`. Какой будет форма результата `a + b`?
A(3, 1)
B(4,)
C(3, 4)
DБудет ошибка broadcasting
Ответ: Массив формы (3, 1) и вектор формы (4,) broadcastятся в матрицу формы (3, 4).
Форма (3, 1) означает «3 строки и 1 столбец». При сложении с вектором (4,) NumPy приводит формы справа налево: (3, 1) и (4,) становятся совместимыми как (3, 1) и (1, 4), после чего broadcasting даёт результат (3, 4). Это полезно для построения «сетки» значений без циклов.
Хотите тренировать интерактивно?
В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.
Тренировать в Telegram