NumPy – работа с массивами и матрицами

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение в NumPy: что это такое и зачем нужно

NumPy — это фундаментальная библиотека Python для научных вычислений, которая предоставляет поддержку мощных многомерных массивов и матриц, а также множество функций для работы с ними. Это незаменимый инструмент для аналитиков данных, специалистов по машинному обучению и научных работников.

NumPy позволяет:

  • выполнять быстрые математические операции над большими объемами данных;

  • заменять циклы компактным векторизованным кодом;

  • использовать встроенные функции линейной алгебры и статистики.

Если вы работаете с таблицами, векторами или матрицами — без NumPy никуда.


Установка и импорт библиотеки NumPy

Чтобы начать работу с NumPy, его нужно установить и импортировать. Процесс простой:

Установка через pip:

bash
pip install numpy

Импорт библиотеки:

python
import numpy as np

Использование псевдонима np — общепринятая практика среди разработчиков Python.


Основы массивов NumPy

NumPy предоставляет структуру ndarray — многомерный массив, который можно использовать как для чисел, так и для более сложных объектов.

Одномерные массивы: создание и использование

python
arr = np.array([1, 2, 3, 4, 5]) print(arr)

Можно создать массив с помощью функций:

  • np.zeros(5) – массив из нулей,

  • np.ones(5) – массив из единиц,

  • np.arange(1, 10, 2) – массив от 1 до 9 с шагом 2.

Двумерные массивы и матрицы

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

Это основной способ задания простых матриц в NumPy.

Многомерные массивы

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

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


Свойства массивов NumPy

Атрибуты shape, dtype, size, ndim

  • arr.shape — форма массива (размерность по каждому измерению),

  • arr.dtype — тип данных (например, int32, float64),

  • arr.size — общее количество элементов,

  • arr.ndim — количество осей (измерений).

python
arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.shape) # (2, 3) print(arr.ndim) # 2

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

Индексация работает аналогично спискам Python, но поддерживает многомерные индексы:

python
arr[0, 2] # элемент первой строки, третий столбец arr[:, 1] # все строки, второй столбец

Срезы позволяют получать части массивов и работать с ними как с новыми массивами.


Операции над массивами

Арифметические операции

Массивы поддерживают операции:

python
a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) print(a + b) # [5 7 9] print(a * 2) # [2 4 6]

NumPy производит операции поэлементно, и это быстрее, чем стандартные циклы.

Логические операции и маскирование

python
a = np.array([1, 2, 3, 4]) mask = a > 2 print(a[mask]) # [3 4]

Фильтрация с помощью булевых масок — одна из самых мощных функций NumPy.


Матрицы в NumPy

Хотя массивы могут выступать в роли матриц, NumPy также предоставляет специальный тип matrix.

Создание и работа с матрицами

python
m = np.matrix([[1, 2], [3, 4]])

Однако использование ndarray предпочтительнее, поскольку matrix считается устаревшим.

Умножение матриц и скалярное произведение

python
A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) result = A @ B

@ — современный способ умножения матриц (или np.dot(A, B)).

Транспонирование и инверсия матриц

python
A.T # Транспонирование np.linalg.inv(A) # Обратная матрица

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) Целые случайные числа.

Пример:

python
np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1. ]

Работа с отсутствующими значениями

Хотя NumPy не имеет встроенной поддержки NaN в int массивах, можно использовать np.nan в массивах типа float.

python
arr = np.array([1, 2, np.nan, 4]) np.isnan(arr) # [False False True False]

Для работы с такими значениями удобно использовать функции:

  • np.nanmean()

  • np.nanstd()

  • np.nansum()


Производительность NumPy против чистого Python

Преимущество NumPy в том, что он написан на C и работает значительно быстрее:

python
import time size = 10**6 a = list(range(size)) b = list(range(size)) start = time.time() result = [x + y for x, y in zip(a, b)] print("Python time:", time.time() - start) import numpy as np a_np = np.arange(size) b_np = np.arange(size) start = time.time() result = a_np + b_np print("NumPy time:", time.time() - start)

Разница может составлять в десятки раз, особенно на больших объемах данных.


Реальные кейсы применения NumPy

NumPy используется в:

  • Науке — обработка экспериментальных данных;

  • Финансах — анализ временных рядов и моделирование;

  • Машинном обучении — подготовка и нормализация данных;

  • Компьютерной графике — работа с изображениями как с массивами;

  • Образовании — визуализация математических функций и алгоритмов.


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

❓ Что такое массив NumPy?

Массив NumPy — это структура данных для хранения чисел в виде таблиц или тензоров с высокой производительностью.

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

NumPy массивы имеют фиксированный тип данных и поддерживают векторные операции, в отличие от списков.

❓ Как создать нулевую матрицу размером 3x3?

python
np.zeros((3, 3))

❓ Как транспонировать матрицу?

Используйте .T:

python
A.T

❓ Как перемножить две матрицы?

python
A @ B

или

python
np.dot(A, B)

❓ Как найти обратную матрицу?

python
np.linalg.inv(A)

📦 Основные категории функций 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() — поиск индекса для вставки.

10. Работа со строками

  •