Медиаблог /

NumPy в Python: что это такое, как установить и работать с массивами

13 августа 2026

NumPy в Python: что это такое, как установить и работать с массивами

NumPy (Numerical Python) — открытая библиотека Python для работы с многомерными числовыми массивами. Ядро написано на C и C++, что даёт скорость до 50 раз выше стандартных списков. Весь современный стек науки о данных строится поверх неё: Pandas, SciPy и Scikit-learn зависят от NumPy напрямую.

Специалист по данным работает с NumPy-массивами за компьютером

Главный объект библиотеки — ndarray (N-dimensional array, многомерный массив). В отличие от Python-списка ndarray хранит данные в непрерывном блоке памяти с единым типом — это и есть причина его скорости. Меньше накладных расходов, больше вычислительной мощи.

image

Учитесь бесплатно за счёт государства

Экономия до 100 000 ₽ на любой программе

Выбрать курс

В статье разберём: что такое NumPy в Python, как его установить через pip или Anaconda, как работать с массивами ndarray, векторизацией, Broadcasting и срезами — с примерами кода и пояснениями. Попробовать NumPy без установки можно прямо сейчас — в Google Colab через браузер.

NumPy — что это такое и зачем нужна библиотека

NumPy расшифровывается как Numerical Python. Библиотека распространяется под лицензией BSD и доступна бесплатно. При импорте её принято называть np — стандарт, принятый всем мировым сообществом Python-разработчиков.

Главное отличие от стандартного Python-списка — архитектурное. Список хранит указатели на разрозненные объекты в памяти. NumPy хранит данные как непрерывный блок в оперативной памяти, где все элементы одного типа лежат рядом. Процессор читает такой блок за один обращение к кешу (cache locality), а не прыгает по разным адресам. Кроме того, операции выполняет не интерпретатор Python, а скомпилированный код на C/C++.

Результат измерим: 820 мкс против 42 мс на массиве из миллиона элементов — разница примерно в 50 раз.

Три ключевых преимущества библиотеки:

  • Скорость — вычисления на уровне C;
  • Экономия памяти — нет лишних указателей, единый тип данных;
  • Векторизация — операция применяется ко всему массиву без написания цикла.

В мире научных вычислений NumPy считают аналогом MATLAB в экосистеме Python: те же матричные операции, то же удобство работы с числами.

Сравнение списка Python и массива NumPy по пяти параметрам

Где применяется NumPy: области и практические задачи

Библиотека NumPy используется везде, где нужны числовые вычисления над большими объёмами данных.

Data Science. Анализ поведения пользователей, A/B-тесты, обработка временных рядов — всё начинается с массивов NumPy, которые Pandas превращает в таблицы.

Машинное обучение. Веса нейронных сетей, входные признаки для Scikit-learn, матрицы активаций — везде ndarray. Без NumPy в Python нет современного машинного обучения.

Научные исследования. Геномика, физические симуляции, обработка изображений, анализ данных телескопов. SciPy расширяет NumPy именно для этих задач.

Матричные вычисления. Линейная алгебра, трансформации координат, трёхмерная графика.

Отдельная задача — обработка пропущенных значений. В NumPy они представлены как np.nan (Not a Number, не является числом) с типом float. Пропуски встречаются в любом реальном наборе данных: незаполненные поля анкеты, сбои датчиков, отсутствующие записи. NumPy позволяет их находить и обрабатывать без удаления строк целиком.

Библиотека нужна аналитикам данных, инженерам машинного обучения, учёным — всем, кто работает с числами в Python.

Как установить NumPy в Python

Для установки NumPy в Python существует три пути: через менеджер пакетов pip, через дистрибутив Anaconda или средствами интегрированной среды разработки. После установки стандартный импорт выглядит так:

import numpy as np

Псевдоним np — повсеместный стандарт: его используют в документации, на форумах, в учебниках. Проверить корректность установки просто:

print(np.__version__) # например, 1.26.4

Установка через pip, Anaconda и IDE

pip — самый распространённый способ. Одна команда в терминале:

pip install numpy

Если используете виртуальное окружение (venv или Poetry) — выполняйте команду внутри него, чтобы библиотека установилась именно в нужный проект.

Установка библиотеки NumPy через команду pip install в терминале

Anaconda — дистрибутив Python для Data Science. NumPy уже предустановлен в базовой поставке Anaconda. Если потребуется обновить или установить отдельно:

conda install numpy

IDE. В PyCharm и VS Code при открытии файла с import numpy среда предложит установить отсутствующий пакет автоматически. Для работы с NumPy в Python также удобен Jupyter Notebook: запускается командой jupyter notebook, поддерживает %timeit для замера скорости прямо в ячейке.

NumPy онлайн — Google Colab без установки

Google Colab — бесплатная облачная среда для работы с Python прямо в браузере. NumPy там уже установлен: откройте новый ноутбук на colab.research.google.com, введите import numpy as np и начинайте работать. Ничего скачивать не нужно, требуется только аккаунт Google. Удобный старт для тех, кто впервые знакомится с NumPy в Python.

Интерфейс Google Colab с ноутбуком для работы с NumPy

Главный объект NumPy — массив ndarray

[IMAGE: image_5]

Основной объект библиотеки — ndarray (N-dimensional array, многомерный массив). Это не просто список чисел: ndarray — строго однородная структура, где все элементы имеют одинаковый тип данных (dtype), а данные лежат в непрерывном блоке оперативной памяти.

NumPy поддерживает массивы любой размерности:

  • 0D — скаляр: одно число;
  • 1D — вектор: одна строка или столбец;
  • 2D — матрица: строки и столбцы;
  • nD — тензор: трёхмерные и выше структуры (например, изображение RGB).

Создать ndarray из Python-списка просто:

import numpy as np

a = np.array([1, 2, 3, 4, 5]) # вектор 1D

b = np.array([[1, 2, 3], [4, 5, 6]]) # матрица 2D

Ключевые атрибуты ndarray: ndim, shape, dtype, size, itemsize, nbytes

Каждый ndarray несёт набор атрибутов, которые описывают его структуру. Знать их обязательно — 90% ошибок новичков связаны с несовпадением форм (shape mismatch).

Атрибут
Что возвращает
Пример значения
.ndim количество измерений 2 (матрица)
.shape кортеж размеров по каждой оси (3, 4) — 3 строки, 4 столбца
.dtype тип данных элементов float64, int32
.size общее число элементов 12
.itemsize размер одного элемента в байтах 8 (float64)
.nbytes общий объём данных в байтах 96 (= 12 × 8)

.ndim = 1 — вектор, 2 — матрица, 3 — тензор. .shape — главный атрибут при отладке: его проверяют в первую очередь при любой ошибке формы. .nbytes удобен для контроля памяти: если массив занимает несколько гигабайт, стоит понизить точность с float64 до float32.

arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float64)

print(arr.shape) # (2, 3)

print(arr.itemsize) # 8

print(arr.nbytes) # 48

Типы данных dtype и проблема upcasting

NumPy поддерживает несколько числовых типов, и от выбора зависит расход памяти:

  • int16 — 2 байта, для небольших целых чисел;
  • int32 / int64 — 4 и 8 байт, по умолчанию для целых;
  • float32 — 4 байта, достаточно для большинства моделей машинного обучения;
  • float64 — 8 байт, двойная точность (по умолчанию для вещественных чисел).

Задать тип явно:

arr = np.array([1, 2, 3], dtype=np.int16) # экономия памяти

Проблема upcasting возникает, когда в массиве оказываются элементы разных типов. NumPy автоматически приводит всё к самому «широкому» типу. Если в числовой массив попадает строка — все элементы превращаются в строки, массив теряет математические операции:

bad = np.array([1, 2, «три»]) # dtype='<U21′, арифметика недоступна

Приводите тип явно через .astype():

arr = arr.astype(np.float64)

print(arr.dtype) # float64

Создание массивов NumPy: все способы

Создавать ndarray вручную из Python-списков удобно для небольших примеров. В реальных задачах Data Science чаще применяют встроенные генераторы: они быстрее, лаконичнее и не требуют ручного ввода тысяч чисел. NumPy предоставляет набор готовых функций для создания массивов любой структуры и размерности.

np.array, np.zeros, np.ones, np.full, np.arange, np.linspace, np.eye

Четыре функции создания массивов NumPy с примерами числовых значений

Ключевые функции с пояснениями:

np.array(list) — создаёт ndarray из Python-списка, поддерживает 1D и 2D:

np.array([1, 2, 3])

np.array([[1, 2], [3, 4]])

np.zeros(shape) и np.ones(shape) — заготовки для заполнения. Удобны, когда размер известен заранее, а данные будут записаны позже:

np.zeros((3, 4)) # матрица 3×4 из нулей

np.ones((2, 3)) # матрица 2×3 из единиц

np.full(shape, value) — заполняет произвольным значением:

np.full((3, 3), 7) # матрица 3×3, все элементы = 7

np.arange(start, stop, step) — аналог Python range(), но поддерживает дробный шаг:

np.arange(0, 1, 0.1) # [0.0, 0.1, 0.2, …, 0.9]

np.linspace(start, stop, num) — задаёте количество точек, шаг рассчитывается сам; конечная граница включена:

np.linspace(0, 1, 11) # 11 равномерных точек от 0 до 1

Для построения графиков предпочтительнее linspace; для целочисленных последовательностей — arange.

np.eye(n) — единичная матрица (диагональ из единиц, остальное нули):

np.eye(3) # матрица 3×3 единичная

Случайные массивы — модуль np.random

Модуль np.random генерирует случайные данные — незаменим при тестировании кода и инициализации весов нейронных сетей:

np.random.rand(3, 4) # матрица 3×4, равномерное [0, 1)

np.random.randint(0, 10, size=(3, 4)) # целые числа от 0 до 9

np.random.randn(3, 4) # нормальное распределение μ=0, σ=1

Важная деталь: rand и randn принимают размер числами через запятую, а randint — через параметр size=(n, m). Это расходится с zeros/ones, где форма передаётся кортежем — частая ошибка при переходе между функциями.

Индексация и срезы в NumPy

Доступ к элементам ndarray работает по тому же принципу, что и в Python-списках — индексация с нуля. Для одномерного массива: arr[2] — третий элемент, arr[1:5] — срез со второго по пятый.

Для двумерных массивов NumPy использует запятую вместо вложенных скобок — это лаконичнее и быстрее:

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

matrix[0, 1] # 2 — первая строка, второй столбец

matrix[0, :] # [1, 2, 3] — вся первая строка

matrix[:, 0] # [1, 4, 7] — весь первый столбец

matrix[0:2, 1:3] # подматрица: строки 0–1, столбцы 1–2

Изменить значения через присваивание:

matrix[0, 0] = 99 # изменяет элемент в исходном массиве

matrix[:, 1] = 0 # обнуляет второй столбец

Булева индексация — фильтрация данных без цикла

Булева маска NumPy — фильтрация элементов массива по условию

Булева индексация — один из самых мощных инструментов NumPy. Условие применяется к массиву, возвращает маску из значений True и False, затем маска используется как индекс:

data = np.array([10, 25, 40, 55, 70])

data[data > 30] # [40, 55, 70]

data[(data > 20) & (data < 60)] # [25, 40, 55]

Три оператора для комбинирования условий:

Хотите сменить профессию или повысить квалификацию?

Федеральный проект «Активные меры содействия занятости» даёт возможность пройти обучение бесплатно за счёт государства

  • Программы от ведущих вузов России — от 2 месяцев
  • Удостоверение или диплом установленного образца
  • Центр карьеры: 7 500+ вакансий, помощь с трудоустройством
Оставить заявку
image
  • & — «и» (оба условия истинны);
  • | — «или» (хотя бы одно истинно);
  • ~ — «не» (инвертирует условие).

Условия в круглых скобках — обязательно, иначе Python вычислит неверный приоритет операций.

Именно этот механизм лежит в основе фильтрации в Pandas: когда вы пишете df[df[‘age’] > 30], под капотом работает та же булева маска NumPy.

Векторизация и Broadcasting — суперсилы NumPy

Векторизация — это применение операции ко всему массиву без цикла for. Операция выполняется на уровне скомпилированного кода C, а не построчно через интерпретатор Python:

prices = np.array([100, 200, 300, 400])

prices + 50 # [150, 250, 350, 450] — скаляр к каждому

prices * 0.9 # скидка 10% на все позиции

np.sqrt(prices) # квадратный корень поэлементно

Бенчмарк: суммирование миллиона элементов — 820 мкс через NumPy против 42 мс через цикл Python. Разница — 50 раз. Именно поэтому в профессиональном коде цикл for по числовому массиву считается антипаттерном.

Важное различие операторов умножения:

  • * — поэлементное умножение (каждый элемент на соответствующий);
  • @ — матричное умножение (скалярное произведение строк и столбцов).

Broadcasting (трансляция) — механизм применения операций к массивам разных форм. NumPy виртуально «растягивает» меньший массив до формы большего без реального копирования данных в памяти:

matrix = np.ones((3, 3))

row = np.array([1, 2, 3]) # форма (3,)

matrix + row # row «растягивается» по строкам — Broadcasting

Broadcasting в NumPy — скаляр виртуально растягивается до размера массива

Правило совместимости форм: размеры по каждой оси либо равны, либо один из них равен 1. Если условие не выполняется — NumPy выдаст ValueError: operands could not be broadcast together.

Параметр axis и агрегирующие функции

NumPy предоставляет функции агрегации: sum, mean, max, min, median, std, var, prod. Без указания axis функция схлопывает весь массив до одного числа — скаляра.

Функция
Что считает
Синтаксис с axis
np.sum() сумма элементов np.sum(arr, axis=0)
np.mean() среднее значение np.mean(arr, axis=1)
np.max() / np.min() максимум / минимум np.max(arr, axis=0)
np.median() медиана np.median(arr, axis=1)
np.std() стандартное отклонение np.std(arr, axis=0)
np.var() дисперсия np.var(arr, axis=1)

Как правильно понять axis=0 и axis=1

Направления осей NumPy: ось 0 по строкам вниз, ось 1 по столбцам вправо

Параметр axis — один из самых частых источников путаницы. Вот мнемоника: axis — это ось, которую мы уничтожаем при агрегации.

Возьмём матрицу продаж (2, 3): 2 магазина, 3 дня:

sales = np.array([[10, 20, 30], # магазин 1

[40, 50, 60]]) # магазин 2

sales.sum(axis=0) # [50, 70, 90] — сумма по каждому дню

sales.sum(axis=1) # [60, 150] — сумма по каждому магазину

axis=0 — движение сверху вниз, уничтожаем строковое измерение, результат получается по столбцам. axis=1 — движение слева направо, уничтожаем столбцовое измерение, результат получается по строкам.

Мнемоника универсальна: она работает с mean, max, min, std, var и всеми остальными агрегаторами одинаково.

Изменение формы массива: метод reshape

Преобразование NumPy-массива из 12 элементов в матрицу 3 на 4

Метод reshape меняет форму массива, не затрагивая данные. Он не создаёт копию — возвращает представление (view) того же блока памяти. Условие одно: общее количество элементов должно сохраняться, иначе NumPy выдаст ValueError.

arr = np.arange(12) # [0, 1, 2, …, 11]

matrix = arr.reshape(3, 4) # матрица 3 строки × 4 столбца

Лайфхак -1: если один из размеров можно не вычислять вручную — поставьте -1, NumPy рассчитает его сам:

arr.reshape(-1, 2) # NumPy считает: строк будет 6

arr.reshape(3, -1) # NumPy считает: столбцов будет 4

Применение в машинном обучении: Scikit-learn требует двумерный вход (n_samples, n_features). Одномерный вектор признаков — reshape(-1, 1) приводит его в нужную форму. Перед свёрточной нейронной сетью пиксели изображения выравниваются через reshape(n, -1).

Объединение массивов и копирование

NumPy позволяет объединять массивы несколькими способами:

Функция
Ось
Описание
np.concatenate([a, b], axis=0) 0 или 1 универсальное объединение
np.vstack([a, b]) 0 (вертикально) удобное сокращение для строк
np.hstack([a, b]) 1 (горизонтально) удобное сокращение для столбцов
np.dstack([a, b]) 2 (по глубине) третья ось, для 3D-массивов
np.stack([a, b], axis=0) новая ось создаёт новое измерение

Критически важно — разница между ссылкой и копией:

a = np.array([1, 2, 3])

b = a # b — ссылка, не копия!

b[0] = 99

print(a) # [99, 2, 3] — исходный изменился

c = a.copy() # c — независимая копия

c[0] = 0

print(a) # [99, 2, 3] — исходный не тронут

В пайплайнах машинного обучения это частая ошибка: трансформации промежуточного массива неожиданно портят исходные данные. Правило простое — нужна независимая копия, всегда используйте .copy().

Практические задачи на NumPy

Евклидово расстояние. Мера схожести двух векторов — основа алгоритмов kNN и кластеризации. Формула: √(Σ(a − b)²):

a = np.array([1, 2, 3])

b = np.array([4, 5, 6])

distance = np.sqrt(np.sum((a — b) ** 2))

print(distance) # 5.196

Этот инструмент не имеет прямого аналога в стандартном Python — его считают именно через NumPy.

Транспонирование матрицы. Поворот матрицы — строки становятся столбцами. Применяется при смене ориентации датасета и обработке изображений:

matrix = np.array([[1, 2, 3], [4, 5, 6]]) # форма (2, 3)

matrix.T # форма (3, 2) — компактно

np.transpose(matrix) # эквивалентный вызов функцией

Обработка пропущенных значений NaN. np.nan — специальный маркер для пропусков с типом float. NumPy предоставляет функции, которые игнорируют пропуски при вычислениях:

data = np.array([1.0, np.nan, 3.0, np.nan, 5.0])

clean = data[~np.isnan(data)] # фильтрация пропусков: [1., 3., 5.]

mean_val = np.nanmean(data) # среднее без учёта NaN: 3.0

Матричное умножение: * против @. Ошибочное применение поэлементного умножения вместо матричного — классический баг в линейной алгебре:

A = np.array([[1, 2], [3, 4]])

B = np.array([[5, 6], [7, 8]])

A * B # [[5, 12], [21, 32]] — поэлементно

A @ B # [[19, 22], [43, 50]] — матричное произведение

NumPy в экосистеме Python Data Science

NumPy в центре экосистемы Data Science — зависимые библиотеки анализа данных

NumPy — фундамент всего стека науки о данных в Python. Остальные библиотеки либо строятся поверх него, либо принимают ndarray на входе.

Pandas создаёт DataFrame поверх NumPy-массивов. Когда вы работаете с колонками и строками Pandas, под капотом — ndarray.

SciPy расширяет NumPy для научных вычислений: оптимизация, интегрирование, обработка сигналов, статистические тесты.

Scikit-learn принимает ndarray на вход во все алгоритмы машинного обучения: классификация, регрессия, кластеризация — все работают с NumPy-массивами.

Matplotlib и Seaborn строят графики напрямую по ndarray без промежуточных преобразований.

Когда использовать NumPy напрямую: числовые вычисления, линейная алгебра, подготовка данных для моделей. Когда переходить на Pandas: данные табличные, с заголовками столбцов, смешанными типами и датами — там нужен DataFrame.

С чего начать изучение NumPy дальше

Официальная документация доступна на numpy.org/doc/ — там же интерактивные примеры и руководство для начинающих.

Следующий шаг в стеке: освоив NumPy в Python, переходите к Pandas (табличные данные), затем Matplotlib (визуализация) и Scikit-learn (модели машинного обучения). Практиковаться удобнее всего в Google Colab или локальном Jupyter Notebook — запускаете ячейки, видите результат сразу.

Если хотите освоить работу с данными системно — в рамках федерального проекта «Активные меры содействия занятости» доступна программа «Специалист по аналитике и базам данных в информационных системах» (72 часа, с нуля, онлайн). Финансирование государственное по нацпроекту «Кадры», старт в июле. Подробнее — в каталоге программ обучения.

Хотите освоить аналитику данных системно — от Python и NumPy до построения полноценных отчётов? В рамках федерального проекта «Активные меры содействия занятости» это возможно без вложений. Программа «Специалист по аналитике и базам данных в информационных системах» — онлайн, с нуля, с официальным документом государственного образца. Смотрите каталог доступных программ.

Часто задаваемые вопросы

Что такое np в Python — это NumPy?

np — стандартный псевдоним при импорте библиотеки: import numpy as np. Технически можно задать любое имя, но np — де-факто стандарт мирового сообщества. Его используют в официальной документации, на Stack Overflow, в учебниках. Две буквы экономят время и делают код мгновенно читаемым для любого коллеги.

Чем массив NumPy отличается от списка Python?

NumPy хранит данные в непрерывном блоке памяти с единым типом — скорость до 50 раз выше, значительная экономия оперативной памяти. Python-список хранит указатели на разрозненные объекты, поддерживает смешанные типы, но медленнее при вычислениях. При больших наборах данных список может вызвать ошибку нехватки памяти (OOM), ndarray — нет.

Как проверить, что NumPy установлен корректно?

Выполните в консоли: import numpy as np; print(np.__version__). Если выводится номер версии (например, 1.26.4) — библиотека работает. Если появляется ModuleNotFoundError — установите через pip install numpy или conda install numpy для Anaconda.

Что такое dtype и почему нужно следить за типом данных?

dtype — тип данных всех элементов ndarray. Если в массив попадают элементы разных типов, NumPy применит upcasting — приведёт всё к самому широкому типу. Числа плюс строка — массив теряет математические операции. Задавайте тип явно: np.array([1, 2, 3], dtype=np.float32). Выбор dtype также влияет на расход памяти: int16 — 2 байта, float64 — 8 байт.

Что такое Broadcasting и когда он срабатывает?

Broadcasting позволяет применять операции к массивам разной формы: NumPy виртуально «растягивает» меньший массив без создания копии в памяти. Срабатывает, если формы совместимы: размеры по каждой оси либо равны, либо один из них равен 1. Пример: matrix + np.array([1, 2, 3]) дублирует вектор по строкам матрицы автоматически.

Как запомнить разницу axis=0 и axis=1?

Мнемоника: axis — это ось, которую вы «уничтожаете» при агрегации. axis=0 — движение сверху вниз, схлопываем строки, результат по столбцам. axis=1 — движение слева направо, схлопываем столбцы, результат по строкам. Правило одинаково работает для sum, mean, max, min, std и всех остальных агрегаторов.

Почему b = a не создаёт копию массива NumPy?

Присваивание b = a передаёт ссылку на тот же объект в памяти, не данные. Изменение b изменит и a. Для независимой копии используйте b = a.copy(). В пайплайнах машинного обучения это критически важно: без .copy() трансформации промежуточного массива будут неожиданно затрагивать исходные данные.

Чем np.arange() отличается от np.linspace()?

np.arange(start, stop, step) — задаёте шаг, количество точек рассчитывается автоматически; поддерживает дробный шаг в отличие от Python range(). np.linspace(start, stop, num) — задаёте количество точек, шаг рассчитывается сам; конечная граница включена. Для построения графиков предпочтительнее linspace, для целочисленных последовательностей — arange.

 

Подайте заявку —
забронируйте место в группе

45 000 мест на 2026 год. Бесплатное обучение по федеральному проекту «Активные меры содействия занятости»

  • Онлайн
  • От 2 месяцев
  • Бесплатно
  • Диплом
Учиться бесплатно
icon