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

Зачем нужен NumPy?

2.2 Middle🔥 151 комментариев
#Python Core

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

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

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

NumPy: фундамент научных вычислений в Python

NumPy — это не просто библиотека, это основа всей экосистемы научных вычислений в Python. За 10+ лет разработки я вижу, что NumPy используется прямо или косвенно в 99% проектов, связанных с данными, ML или математикой.

Проблема, которую NumPy решает

Python lists — слишком медленные для науки

# Наивный подход с Python lists
import time

data = list(range(1_000_000))
start = time.time()
result = [x * 2 for x in data]
print(f"Lists: {time.time() - start:.4f} сек")
# Lists: 0.0456 сек

# NumPy approach
import numpy as np

data = np.arange(1_000_000)
start = time.time()
result = data * 2
print(f"NumPy: {time.time() - start:.4f} сек")
# NumPy: 0.0008 сек
# NumPy в 50+ раз быстрее!

Почему NumPy так быстро?

  1. Написан на C — не интерпретируется, а компилируется
  2. Contiguous memory layout — данные в памяти подряд, CPU cache дружит
  3. Vectorized operations — вся операция выполняется одной инструкцией
  4. SIMD/BLAS — использует низкоуровневые оптимизации (SSE, AVX)

Основные применения NumPy

1. Работа с многомерными массивами

import numpy as np

# 1D array (вектор)
v = np.array([1, 2, 3, 4, 5])
print(v)  # [1 2 3 4 5]

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

# 3D array и выше
tensor = np.zeros((2, 3, 4))  # Тензор 2x3x4

# Индексирование и slicing
print(m[0, 1])  # 2
print(m[:, 1])  # [2 5] — вторая колонка
print(m[0, :])  # [1 2 3] — первая строка

2. Математические операции

import numpy as np

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 ** 2)     # [1 4 9] — возведение в степень

# Матричные операции
matrix_mult = np.dot(a, b)  # 1*4 + 2*5 + 3*6 = 32
print(matrix_mult)  # 32

# Тригонометрия и трансцендентные функции
print(np.sin(a))   # [0.84147098 0.90929743 0.14112001]
print(np.log(a))   # [0. 0.69314718 1.09861229]

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

import numpy as np
from numpy.linalg import solve, inv, eig

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

x = solve(A, b)  # Найти x такой что Ax = b
print(x)  # [2. 3.]

# Обратная матрица
A_inv = inv(A)
print(A_inv @ A)  # Единичная матрица [[1. 0.] [0. 1.]]

# Собственные значения и векторы
eigenvalues, eigenvectors = eig(A)
print(eigenvalues)     # [3.37228132 1.62771868]
print(eigenvectors)    # Матрица собственных векторов

4. Статистика и агрегация

import numpy as np

data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# Базовая статистика
print(np.mean(data))       # 5.5 — среднее
print(np.median(data))     # 5.5 — медиана
print(np.std(data))        # ~2.87 — стандартное отклонение
print(np.sum(data))        # 55 — сумма
print(np.prod(data))       # 3628800 — произведение
print(np.max(data))        # 10 — максимум
print(np.argmax(data))     # 9 — индекс максимума

# Матричная статистика
matrix = np.random.randn(5, 3)
print(np.mean(matrix, axis=0))  # Среднее по столбцам
print(np.mean(matrix, axis=1))  # Среднее по строкам

5. Генерация случайных чисел

import numpy as np

# Инициализация seed для воспроизводимости
np.random.seed(42)

# Равномерное распределение [0, 1)
random_uniform = np.random.random(5)
print(random_uniform)  # [0.37 0.95 0.73 0.60 0.16]

# Нормальное распределение (mean=0, std=1)
random_normal = np.random.randn(5)
print(random_normal)   # [-0.61  0.64  1.48 -0.92 -0.59]

# Случайные целые числа
random_int = np.random.randint(0, 10, size=5)
print(random_int)      # [9 2 7 5 3]

# Выбор элементов из списка
choice = np.random.choice([1, 2, 3, 4, 5], size=3)
print(choice)          # [2 5 1]

NumPy в экосистеме

Всё строится на NumPy:

# Pandas — работа с табличными данными
import pandas as pd
df = pd.DataFrame(np.random.randn(1000, 4))

# Scikit-learn — машинное обучение
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)  # X_train и y_train — NumPy arrays

# TensorFlow/PyTorch — глубокое обучение
import tensorflow as tf
tensor = tf.constant(np.array([[1, 2], [3, 4]]))

# Matplotlib — визуализация
import matplotlib.pyplot as plt
plt.plot(np.linspace(0, 10, 100), np.sin(np.linspace(0, 10, 100)))
plt.show()

Оптимизация: Broadcasting

Одна из самых мощных фич NumPy — broadcasting (трансляция):

import numpy as np

# Broadcasting пример 1
a = np.array([[1, 2, 3],     # shape (2, 3)
              [4, 5, 6]])
b = np.array([10, 20, 30])   # shape (3,)

# b трансляруется в [[10, 20, 30],
#                     [10, 20, 30]]
result = a + b
print(result)  # [[11 22 33]
               #  [14 25 36]]

# Broadcasting пример 2
a = np.array([[1],            # shape (3, 1)
              [2],
              [3]])
b = np.array([10, 20, 30])    # shape (3,)

# Становится (3, 3)
result = a * b
print(result)  # [[10 20 30]
               #  [20 40 60]
               #  [30 60 90]]

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

✅ Обязательно используй NumPy для:

  • Научные вычисления
  • Анализ данных (pandas строится на NumPy)
  • Машинное обучение
  • Обработка изображений
  • Сигнальная обработка
  • Финансовые расчёты

❌ Не нужен NumPy для:

  • Простых скриптов
  • Веб-приложений (разве что для встроенной аналитики)
  • Если нужны только list/dict операции

Performance tips

import numpy as np

# Медленно: Python loop
result = []
for i in range(1_000_000):
    result.append(i * 2)

# Быстро: NumPy vectorization
arr = np.arange(1_000_000)
result = arr * 2

# Очень быстро: используй встроенные функции NumPy
# (они написаны на C и максимально оптимизированы)
result = np.multiply(arr, 2, out=arr)  # In-place operation

Заключение

NumPy — это фундамент Python для науки и анализа данных. Он:

  • В 50+ раз быстрее чистого Python для массовых операций
  • Основа для Pandas, Scikit-learn, TensorFlow, PyTorch
  • Обязателен для любого, кто работает с данными
  • Интуитивен — напоминает математическую нотацию

Если вы разработчик, которому нужна работать с данными или ML — NumPy критически важен для вашего набора навыков.