NumPy: основы: вопросы для собеседования (часть 3)
NumPy — фундамент для числовых вычислений в Python и основа pandas, scipy, sklearn. На собеседовании спрашивают про ndarray, broadcasting, векторизацию, индексирование массивов и разницу в производительности с чистым Python. Понимание NumPy показывает, что аналитик готов работать с данными эффективно.
Вопросы 11–15 из 20
11В массиве `scores` формы (100, 7) строки — пользователи, столбцы — дни недели. Как посчитать среднее значение для каждого пользователя (по строкам)?
A`np.mean(scores, axis=0)`
B`np.mean(scores)`
C`np.mean(scores, axis=2)`
D`np.mean(scores, axis=1)`
Ответ: Среднее по строкам в 2D массиве считается через `axis=1`.
Если строки — пользователи, то «среднее по пользователю» означает свернуть столбцы (дни недели) и оставить одну величину на строку. Это `np.mean(scores, axis=1)`, результат будет 1D массив длины 100. Правильный выбор `axis` — одна из самых важных базовых компетенций при работе с NumPy.
12Почему при работе с числовыми данными для аналитики часто предпочитают `ndarray` вместо Python `list`?
A`ndarray` хорош тем, что хранит значения разных типов вперемешку быстрее, чем `list`.
BПотому что `list` поддерживает broadcasting, а `ndarray` — нет.
C`ndarray` обычно однороден по типу (`dtype`), хранит данные компактнее и поддерживает быстрые поэлементные операции.
DПотому что `ndarray` автоматически хранит данные на диске, а не в памяти.
Ответ: Однородность типов и компактное хранение делают `ndarray` удобным для численной аналитики.
Python `list` может содержать разные типы, но это не оптимально для больших числовых массивов. NumPy `ndarray` обычно имеет один `dtype`, что позволяет хранить данные плотнее и выполнять векторные операции быстрее. Это напрямую связано с целями: понимать, когда нужен NumPy, и применять базовые операции без ручных циклов.
13Есть матрица продаж `sales` формы (12, 5): строки — месяцы, столбцы — продукты. Как получить сумму продаж по каждому продукту за все месяцы?
A`np.sum(sales, axis=1)`
B`np.sum(sales, axis=0)`
C`np.sum(sales)`
D`np.sum(sales, axis=2)`
Ответ: Чтобы получить суммы по столбцам, используйте `axis=0`.
В табличной логике «продукты в столбцах» означает: агрегировать по строкам (месяцам) и оставить столбцы. Это соответствует `np.sum(sales, axis=0)`. Если перепутать `axis`, легко получить «правильные числа не того смысла» — частая ошибка в аналитике.
14Вы считаете метрику по большому массиву чисел и выбираете NumPy вместо Python `list`. Почему операции вроде `arr * 1.1` на `ndarray` обычно быстрее, чем цикл `for` по `list`?
A`ndarray` хранит данные однородно и выполняет операции в оптимизированном C-коде (векторизация), минимизируя Python-циклы.
BПотому что `list` всегда хранит числа в непрерывной памяти, а `ndarray` — нет.
CПотому что `ndarray` по умолчанию выполняет вычисления на GPU без настроек.
DПотому что `ndarray` может хранить в одном массиве разные типы быстрее, чем `list`.
Ответ: NumPy ускоряет численные операции за счёт однородных данных и векторизованного исполнения.
Главная идея NumPy: данные в `ndarray` обычно одного типа и лежат компактно, а операции выполняются внутри оптимизированных библиотек. Поэтому выражения вроде `arr * 1.1` работают без явного Python-цикла `for` и часто быстрее для больших объёмов данных. Для аналитики это ключевой аргумент «когда нужен NumPy».
15Пусть `m = np.array([[1, 2, 3], [4, 5, 6]])`. Чему равен `np.mean(m, axis=1)`?
AСкаляр 3.5
B`np.array([2, 5, 8])`
C`np.array([2, 3, 4])`
D`np.array([2., 5.])`
Ответ: `axis=1` агрегирует по столбцам внутри строки: среднее по каждой строке.
Для 2D массива `axis=1` означает: «свернуть столбцы, получить результат на каждую строку». В первой строке среднее (1+2+3)/3 = 2, во второй (4+5+6)/3 = 5, поэтому результат `np.array([2., 5.])`. Это типичный приём для расчёта метрик по объектам (строкам).
Хотите тренировать интерактивно?
В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.
Тренировать в Telegram