← Назад к вопросам

Что такое NumPy?

1.0 Junior🔥 241 комментариев
#Pandas и обработка данных#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

NumPy: Фундамент Python Data Science

Определение

NumPy (Numerical Python) - это самая базовая и важная библиотека для численных вычислений в Python. Она предоставляет:

  1. N-мерные массивы (ndarray)
  2. Матричные операции
  3. Линейную алгебру
  4. Статистические функции
  5. Инструменты для генерации случайных чисел

История

2006: Трэвис Олифант создаёт NumPy
      (объединил Numeric и Numarray)
2020+: NumPy становится стандартом для всех ML библиотек

Почему NumPy так важна?

Сравнение: Python List vs NumPy Array

# Python List (медленно)
list_data = [1, 2, 3, 4, 5]
result = [x * 2 for x in list_data]  # медленно, интерпретируется

# NumPy (быстро)
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
result = arr * 2  # векторизовано, выполняется в C

# Скорость: NumPy в 10-100x быстрее!

Причина: NumPy использует C код под капотом, а не интерпретирует Python.

Основные компоненты

1. Массив (ndarray)

import numpy as np

# 1D массив (вектор)
arr_1d = np.array([1, 2, 3, 4, 5])
print(arr_1d.shape)  # (5,)

# 2D массив (матрица)
arr_2d = np.array([[1, 2, 3],
                    [4, 5, 6]])
print(arr_2d.shape)  # (2, 3)

# 3D массив (тензор)
arr_3d = np.array([[[1, 2], [3, 4]],
                    [[5, 6], [7, 8]]])
print(arr_3d.shape)  # (2, 2, 2)

Ключевое отличие от List:

  • Все элементы одного типа (int32, float64 и т.д.)
  • Зафиксированный размер
  • Очень быстрые операции

2. Создание массивов

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

# Единицы
np.ones((2, 4))  # матрица 2x4 из единиц

# Случайные числа
np.random.rand(3, 3)  # случайные [0, 1]
np.random.randn(3, 3)  # из нормального распределения

# Диапазон
np.arange(0, 10, 2)  # [0, 2, 4, 6, 8]
np.linspace(0, 1, 5)  # [0, 0.25, 0.5, 0.75, 1]

3. Индексирование и срезы

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

# Индексирование
print(arr[0])  # 1
print(arr[-1])  # 5 (последний)

# Срезы
print(arr[1:4])  # [2, 3, 4]
print(arr[::2])  # [1, 3, 5] (каждый второй)

# 2D индексирование
matrix = np.array([[1, 2, 3],
                    [4, 5, 6]])
print(matrix[0, 1])  # 2 (строка 0, колонка 1)
print(matrix[1, :])  # [4, 5, 6] (вся вторая строка)

4. Операции с массивами

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# Арифметика (поэлементная)
print(a + b)  # [5, 7, 9]
print(a * b)  # [4, 10, 18]
print(a / b)  # [0.25, 0.4, 0.5]

# Матричные операции
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])

# Матричное умножение
np.dot(matrix_a, matrix_b)  # правильное матричное умножение
matrix_a @ matrix_b  # то же самое (более новый синтаксис)

# Транспонирование
matrix_a.T  # перевернуть строки и колонки

5. Агрегирующие функции

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

print(np.sum(arr))  # 15
print(np.mean(arr))  # 3.0
print(np.std(arr))  # стандартное отклонение
print(np.min(arr))  # 1
print(np.max(arr))  # 5

# По осям
matrix = np.array([[1, 2, 3],
                    [4, 5, 6]])
print(np.sum(matrix, axis=0))  # [5, 7, 9] (по столбцам)
print(np.sum(matrix, axis=1))  # [6, 15] (по строкам)

6. Линейная алгебра

import numpy.linalg as la

# Определитель
matrix = np.array([[1, 2], [3, 4]])
det = la.det(matrix)  # -2

# Обратная матрица
inv = la.inv(matrix)

# Решение системы уравнений
# Ax = b
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
x = la.solve(A, b)  # решение

# Собственные значения
eigenvalues, eigenvectors = la.eig(matrix)

Практический пример: Машинное обучение

import numpy as np

# Датасет: 100 примеров, 3 признака
X = np.random.randn(100, 3)
y = np.random.randint(0, 2, 100)  # бинарная классификация

# Разделить на train/test
idx = np.random.permutation(100)
train_idx = idx[:80]
test_idx = idx[80:]

X_train = X[train_idx]
y_train = y[train_idx]
X_test = X[test_idx]
y_test = y[test_idx]

print(f"Train: {X_train.shape}, Test: {X_test.shape}")

# Нормализация (стандартизация)
mean = np.mean(X_train, axis=0)
std = np.std(X_train, axis=0)
X_train_norm = (X_train - mean) / std
X_test_norm = (X_test - mean) / std

# Простая регрессия: найти w такой что X*w ≈ y
# Решение: w = (X^T X)^-1 X^T y
w = np.linalg.solve(X_train.T @ X_train, X_train.T @ y_train)
print(f"Веса: {w}")

# Предсказание
y_pred = X_test @ w
print(f"Предсказания: {y_pred}")

# Ошибка
mse = np.mean((y_pred - y_test) ** 2)
print(f"MSE: {mse}")

Связь с другими библиотеками

NumPy
  ↓
  Pandas (табличные данные, построена на NumPy)
  ↓
  Scikit-learn (машинное обучение)
  ↓
  TensorFlow, PyTorch (глубокое обучение)

Все бо́льшие ML библиотеки используют NumPy как foundation.

Важные концепции

1. Broadcasting

a = np.array([[1, 2, 3],
              [4, 5, 6]])  # shape (2, 3)
b = np.array([10, 20, 30])  # shape (3,)

# NumPy автоматически "расширяет" b к (2, 3)
result = a + b
# [[11, 22, 33],
#  [14, 25, 36]]

Это очень мощный механизм для векторизации кода.

2. Vectorization

# Плохо (медленно)
def add_one_slow(arr):
    for i in range(len(arr)):
        arr[i] += 1

# Хорошо (быстро)
def add_one_fast(arr):
    return arr + 1  # NumPy vectorizes this

3. Memory эффективность

# NumPy использует continuous memory block
# это позволяет GPU и CPU кэшам работать эффективно

arr = np.arange(1000000)
# занимает ~4MB (float32) вместо многих MB для Python list

Когда использовать NumPy

Используй NumPy когда:

  1. Работаешь с числовыми данными
  2. Нужны матричные операции
  3. Нужна скорость
  4. Работаешь в ML/Data Science

НЕ используй NumPy когда:

  1. Данные очень структурированы (используй Pandas)
  2. Нужны графики (используй Matplotlib)
  3. Нужна визуализация данных (используй Plotly)

Практический совет

Используй NumPy "vectorized" операции, а не loops:

# Очень плохо (1000x медленнее)
result = []
for i in range(1000000):
    result.append(data[i] * 2)

# Отлично (1000x быстрее)
result = data * 2

Заключение

NumPy - это не просто библиотека, это язык для работы с числовыми данными в Python. Без NumPy не было бы pandas, scikit-learn, TensorFlow. Это fundamental инструмент для любого Data Scientist и ML Engineer.