Что такое NumPy?
NumPy — библиотека для работы с многомерными массивами в Python. Операции над массивами NumPy в десятки раз быстрее обычных Python-списков благодаря векторизации на C.
pip install numpy
import numpy as np
Создание массивов
# Из списка
a = np.array([1, 2, 3, 4, 5])
print(a.dtype) # int64
print(a.shape) # (5,)
print(a.ndim) # 1
# 2D массив (матрица)
m = np.array([[1, 2, 3],
[4, 5, 6]])
print(m.shape) # (2, 3)
# Специальные массивы
np.zeros((3, 3)) # матрица нулей 3×3
np.ones((2, 4)) # матрица единиц 2×4
np.eye(3) # единичная матриц�� 3×3
np.full((2, 3), 7) # матрица из семёрок
# Последовательности
np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
np.linspace(0, 1, 5) # [0.0, 0.25, 0.5, 0.75, 1.0]
# Случайные числа
np.random.seed(42)
np.random.rand(3, 3) # равномерное [0, 1)
np.random.randn(3, 3) # нормальное N(0,1)
np.random.randint(0, 10, (3, 3)) # целые от 0 до 9
Индексация и срезы
a = np.array([10, 20, 30, 40, 50])
a[0] # 10 — первый элемент
a[-1] # 50 — последний
a[1:4] # [20, 30, 40]
a[::2] # [10, 30, 50] — каждый второй
# 2D индексация
m = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
m[0, 0] # 1 — первый элемент
m[1, 2] # 6
m[:, 1] # [2, 5, 8] — второй столбец
m[0, :] # [1, 2, 3] — первая строка
m[1:, 1:] # подматрица [[5,6],[8,9]]
Булева маска
a = np.array([1, -2, 3, -4, 5, -6])
# Маска
mask = a > 0
print(mask) # [True False True False True False]
# Фильтрация
print(a[mask]) # [1 3 5]
print(a[a > 0]) # то же самое
# Замена отрицательных на 0
a[a < 0] = 0
print(a) # [1 0 3 0 5 0]
# np.where
b = np.array([1, 2, 3, 4, 5])
result = np.where(b > 3, "big", "small")
print(result) # ['small' 'small' 'small' 'big' 'big']
Математические операции
a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
# Поэлементные операции
print(a + b) # [11 22 33 44]
print(a * b) # [10 40 90 160]
print(a ** 2) # [1 4 9 16]
print(np.sqrt(a)) # [1.0 1.41 1.73 2.0]
# Агрегирующие функции
print(a.sum()) # 10
print(a.mean()) # 2.5
print(a.max()) # 4
print(a.min()) # 1
print(a.std()) # стандартное отклонение
# По осям в 2D
m = np.array([[1, 2, 3], [4, 5, 6]])
print(m.sum(axis=0)) # [5, 7, 9] — по столбцам
print(m.sum(axis=1)) # [6, 15] — по строкам
Broadcasting
NumPy автоматически «растягивает» массивы для операций:
a = np.array([[1, 2, 3],
[4, 5, 6]]) # shape (2, 3)
b = np.array([10, 20, 30]) # shape (3,) → broadcast как (2, 3)
print(a + b)
# [[11 22 33]
# [14 25 36]]
# Нормализация строк
row_means = a.mean(axis=1, keepdims=True) # shape (2, 1)
normalized = a - row_means
Изменение формы
a = np.arange(12) # [0, 1, 2, ..., 11]
# reshape
m = a.reshape(3, 4) # матрица 3×4
m = a.reshape(2, 2, 3) # 3D тензор
# flatten / ravel
flat = m.flatten() # новый плоский массив (копия)
flat = m.ravel() # плоский массив (view если возможно)
# Транспонирование
m = np.array([[1, 2, 3], [4, 5, 6]])
print(m.T) # [[1, 4], [2, 5], [3, 6]]
# expand_dims
a = np.array([1, 2, 3]) # shape (3,)
print(a[:, np.newaxis]) # shape (3, 1)
Линейная алгебра
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# Матричное умножение
C = A @ B # или np.matmul(A, B)
print(C)
# [[19 22]
# [43 50]]
# Определитель
print(np.linalg.det(A)) # -2.0
# Обратная матрица
print(np.linalg.inv(A))
# Решение системы уравнений Ax = b
b = np.array([1, 2])
x = np.linalg.solve(A, b) # [-1. 0.5]
# Норма вектора
v = np.array([3, 4])
print(np.linalg.norm(v)) # 5.0
Практический пример: нормализация данных
import numpy as np
# Данные: оценки студентов
scores = np.array([[85, 90, 78],
[92, 88, 95],
[71, 84, 89]])
# Min-Max нормализация ��о столбцам
col_min = scores.min(axis=0)
col_max = scores.max(axis=0)
normalized = (scores - col_min) / (col_max - col_min)
print(normalized.round(2))
# [[0.67 1. 0. ]
# [1. 0.67 1. ]
# [0. 0. 0.65]]
# Средняя оценка каждого студента
avg = scores.mean(axis=1)
print(avg) # [84.33 91.67 81.33]
NumPy — основа Data Science в Python. В тренажёре Python Lab раздел NumPy содержит 32 задачи — от создания массивов до SVD разложения и gradient descent!