NumPy — фундамент для числовых вычислений в Python и основа pandas, scipy, sklearn. На собеседовании спрашивают про ndarray, broadcasting, векторизацию, индексирование массивов и разницу в производительности с чистым Python. Понимание NumPy показывает, что аналитик готов работать с данными эффективно.
В двумерном массиве у `axis=0` направление «вниз»: операция проходит по строкам и сворачивает их в один результат на столбец. Для `x = [[1, 2], [3, 4]]` суммы по столбцам равны `1 + 3 = 4` и `2 + 4 = 6`, итог — `np.array([4, 6])`. Если поставить `axis=1`, агрегация идёт «вправо», по строкам, и получится `np.array([3, 7])`. Без указания `axis` `np.sum(x)` сворачивает массив целиком и возвращает скаляр `10`.
Подробный разбор →В записи `arr[:, 1]` двоеточие означает «все строки», а индекс 1 — второй столбец. Поэтому возвращается столбец `[20, 50]` как одномерный массив. Если хотелось получить первый столбец, нужно было бы написать `arr[:, 0]`, а для третьего — `arr[:, 2]`. Срез по столбцу из 2D массива даёт 1D, а не 2D с формой `(n, 1)`.
Подробный разбор →`X.mean(axis=0)` сворачивает измерение строк и оставляет вектор по столбцам — для матрицы (1000, 3) получается форма (3,). При операции `X - mean` правила broadcasting автоматически растягивают вектор по строкам, и из каждой строки вычитается одно и то же среднее значение по соответствующему столбцу. Это и даёт центрированную матрицу той же формы (1000, 3). Никакой in-place мутации `X` `mean()` не делает, и вернуть отдельное число (а не вектор) могло бы только `X.mean()` без `axis`.
Подробный разбор →Broadcasting сравнивает формы по осям справа налево. Для (2, 3) и (2,) сравниваются последние оси: 3 и 2 — они не равны и ни одна не равна 1, значит формы несовместимы и выражение `a + b` упадёт с ошибкой. Умение проверять совместимость форм экономит много времени при отладке.
Подробный разбор →Форма (3, 1) означает «3 строки и 1 столбец». При сложении с вектором (4,) NumPy приводит формы справа налево: (3, 1) и (4,) становятся совместимыми как (3, 1) и (1, 4), после чего broadcasting даёт результат (3, 4). Это полезно для построения «сетки» значений без циклов.
Подробный разбор →В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.
Тренировать Python в Telegram