Python Lab

NumPy для начинающих: массивы, операции, практика

Введение в NumPy: создание массивов, индексация, математические операции, broadcasting. С примерами кода.

10 января 2026 г.·11 мин чтения
numpydata scienceмассивы

Что такое 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!

Хочешь закрепить знания?

Попробуй решить задачи на Python в интерактивном тренажёре

К задачам