Введение в NumPy: что это такое и зачем нужно
NumPy — это фундаментальная библиотека Python для научных вычислений, которая предоставляет поддержку мощных многомерных массивов и матриц, а также множество функций для работы с ними. Это незаменимый инструмент для аналитиков данных, специалистов по машинному обучению и научных работников.
NumPy позволяет:
-
выполнять быстрые математические операции над большими объемами данных;
-
заменять циклы компактным векторизованным кодом;
-
использовать встроенные функции линейной алгебры и статистики.
Если вы работаете с таблицами, векторами или матрицами — без NumPy никуда.
Установка и импорт библиотеки NumPy
Чтобы начать работу с NumPy, его нужно установить и импортировать. Процесс простой:
Установка через pip:
Импорт библиотеки:
Использование псевдонима np
— общепринятая практика среди разработчиков Python.
Основы массивов NumPy
NumPy предоставляет структуру ndarray
— многомерный массив, который можно использовать как для чисел, так и для более сложных объектов.
Одномерные массивы: создание и использование
Можно создать массив с помощью функций:
-
np.zeros(5)
– массив из нулей, -
np.ones(5)
– массив из единиц, -
np.arange(1, 10, 2)
– массив от 1 до 9 с шагом 2.
Двумерные массивы и матрицы
Это основной способ задания простых матриц в NumPy.
Многомерные массивы
NumPy легко справляется с тензорами любой размерности, что делает его полезным для глубокой обработки данных.
Свойства массивов NumPy
Атрибуты shape, dtype, size, ndim
-
arr.shape
— форма массива (размерность по каждому измерению), -
arr.dtype
— тип данных (например,int32
,float64
), -
arr.size
— общее количество элементов, -
arr.ndim
— количество осей (измерений).
Индексация и срезы в массивах
Индексация работает аналогично спискам Python, но поддерживает многомерные индексы:
Срезы позволяют получать части массивов и работать с ними как с новыми массивами.
Операции над массивами
Арифметические операции
Массивы поддерживают операции:
NumPy производит операции поэлементно, и это быстрее, чем стандартные циклы.
Логические операции и маскирование
Фильтрация с помощью булевых масок — одна из самых мощных функций NumPy.
Матрицы в NumPy
Хотя массивы могут выступать в роли матриц, NumPy также предоставляет специальный тип matrix
.
Создание и работа с матрицами
Однако использование ndarray
предпочтительнее, поскольку matrix
считается устаревшим.
Умножение матриц и скалярное произведение
@
— современный способ умножения матриц (или np.dot(A, B)
).
Транспонирование и инверсия матриц
NumPy имеет мощный модуль linalg
для работы с линейной алгеброй.
Функции и методы NumPy для работы с массивами
NumPy включает десятки функций для статистики, алгебры, генерации случайных чисел и других операций:
-
np.mean()
,np.median()
,np.std()
— статистика, -
np.sum()
,np.prod()
— агрегация, -
np.unique()
— уникальные значения, -
np.sort()
— сортировка.
Расширенные методы генерации массивов
NumPy предоставляет гибкие способы создания массивов с помощью функций:
Функция | Назначение |
---|---|
np.linspace(start, stop, num) |
Создает массив из num равномерно распределенных точек между start и stop . |
np.logspace(start, stop, num) |
Логарифмическое распределение. |
np.random.rand(dims) |
Массив случайных чисел от 0 до 1. |
np.random.randint(low, high, size) |
Целые случайные числа. |
Пример:
Работа с отсутствующими значениями
Хотя NumPy не имеет встроенной поддержки NaN
в int
массивах, можно использовать np.nan
в массивах типа float
.
Для работы с такими значениями удобно использовать функции:
-
np.nanmean()
-
np.nanstd()
-
np.nansum()
Производительность NumPy против чистого Python
Преимущество NumPy в том, что он написан на C и работает значительно быстрее:
Разница может составлять в десятки раз, особенно на больших объемах данных.
Реальные кейсы применения NumPy
NumPy используется в:
-
Науке — обработка экспериментальных данных;
-
Финансах — анализ временных рядов и моделирование;
-
Машинном обучении — подготовка и нормализация данных;
-
Компьютерной графике — работа с изображениями как с массивами;
-
Образовании — визуализация математических функций и алгоритмов.
Часто задаваемые вопросы (FAQ)
❓ Что такое массив NumPy?
Массив NumPy — это структура данных для хранения чисел в виде таблиц или тензоров с высокой производительностью.
❓ Чем отличается массив NumPy от списка Python?
NumPy массивы имеют фиксированный тип данных и поддерживают векторные операции, в отличие от списков.
❓ Как создать нулевую матрицу размером 3x3?
❓ Как транспонировать матрицу?
Используйте .T
:
❓ Как перемножить две матрицы?
или
❓ Как найти обратную матрицу?
📦 Основные категории функций NumPy
1. Создание массивов
-
np.array()
— создание массива из списка или кортежа. -
np.zeros()
— создание массива, заполненного нулями. -
np.ones()
— создание массива, заполненного единицами. -
np.arange()
— создание массива с равномерно распределёнными значениями. -
np.linspace()
— создание массива с заданным количеством точек между двумя значениями. -
np.full()
— создание массива, заполненного заданным значением. -
np.eye()
— создание единичной матрицы. -
np.random.rand()
— создание массива с случайными значениями от 0 до 1. -
np.random.randint()
— создание массива с случайными целыми числами в заданном диапазоне. -
np.random.normal()
— создание массива с нормально распределёнными значениями.
2. Математические операции
-
np.add()
,np.subtract()
,np.multiply()
,np.divide()
— поэлементные арифметические операции. -
np.power()
— возведение в степень. -
np.mod()
— вычисление остатка от деления. -
np.sum()
,np.prod()
— сумма и произведение элементов массива. -
np.cumsum()
,np.cumprod()
— кумулятивная сумма и произведение. -
np.mean()
,np.median()
,np.std()
— среднее, медиана и стандартное отклонение. -
np.min()
,np.max()
,np.argmin()
,np.argmax()
— минимальное, максимальное значения и их индексы.
3. Линейная алгебра
-
np.dot()
— скалярное произведение. -
np.matmul()
или@
— матричное умножение. -
np.linalg.inv()
— вычисление обратной матрицы. -
np.linalg.det()
— определитель матрицы. -
np.linalg.eig()
— собственные значения и векторы. -
np.linalg.solve()
— решение системы линейных уравнений.
4. Тригонометрические и гиперболические функции
-
np.sin()
,np.cos()
,np.tan()
— синус, косинус и тангенс. -
np.arcsin()
,np.arccos()
,np.arctan()
— обратные тригонометрические функции. -
np.sinh()
,np.cosh()
,np.tanh()
— гиперболические функции. -
np.arcsinh()
,np.arccosh()
,np.arctanh()
— обратные гиперболические функции.
5. Экспоненциальные и логарифмические функции
-
np.exp()
,np.exp2()
,np.expm1()
— экспоненциальные функции. -
np.log()
,np.log10()
,np.log2()
,np.log1p()
— логарифмические функции. -
np.sqrt()
— квадратный корень. -
np.cbrt()
— кубический корень.
6. Реальные и комплексные функции
-
np.real()
,np.imag()
,np.angle()
— извлечение действительной и мнимой частей, угла комплексного числа. -
np.conj()
— комплексное сопряжение. -
np.isreal()
,np.iscomplex()
— проверка на действительное или комплексное число.
7. Обработка ошибок с плавающей точкой
-
np.seterr()
— установка поведения при возникновении ошибок с плавающей точкой. -
np.errstate()
— контекстный менеджер для временной установки поведения при ошибках. -
np.isfinite()
,np.isinf()
,np.isnan()
— проверка на конечность, бесконечность и NaN.
8. Манипуляции с массивами
-
np.reshape()
,np.ravel()
,np.flatten()
— изменение формы и выравнивание массива. -
np.transpose()
,np.swapaxes()
— транспонирование и обмен осями. -
np.concatenate()
,np.stack()
,np.hstack()
,np.vstack()
— объединение массивов. -
np.split()
,np.array_split()
,np.hsplit()
,np.vsplit()
— разделение массивов. -
np.tile()
,np.repeat()
— повторение массива.
9. Индексация и выбор элементов
-
np.where()
— условная индексация. -
np.take()
,np.put()
— выбор и установка элементов по индексу. -
np.argwhere()
,np.nonzero()
— индексы ненулевых элементов. -
np.unique()
— уникальные элементы. -
np.searchsorted()
— поиск индекса для вставки.