Карта подмодулей SciPy: что где искать
Девять главных подмодулей SciPy на одной карте — чтобы под любую научную задачу вы знали, куда смотреть.
Подмодуль SciPy — тематический набор функций (например,
scipy.optimize), который импортируется отдельно и решает свой класс задач.
Зачем нужна карта
SciPy огромен — сотни функций. Без общей карты легко либо не найти готовое решение и написать своё (хуже), либо взять не тот инструмент. Эта карта — ваш «оглавление» на весь оставшийся курс: дальше мы разберём каждый блок подробно, а пока — обзор с высоты птичьего полёта.
Девять подмодулей
| Подмодуль | Класс задач | Типичный вопрос |
linalg | Линейная алгебра | «Реши систему Ax = b» |
optimize | Оптимизация и корни | «Где минимум функции? Где её корень?» |
integrate | Интегралы и ОДУ | «Чему равен ∫f dx? Как меняется система во времени?» |
interpolate | Интерполяция | «Восстанови значение между точками» |
stats | Статистика | «Какое распределение? Значим ли результат?» |
signal | Сигналы | «Отфильтруй шум, найди частоты» |
special | Спец. функции | «Посчитай гамму, Бесселя, erf» |
sparse | Разреженные матрицы | «Матрица огромная, но почти вся из нулей» |
spatial | Геометрия и соседи | «Найди ближайшую точку, расстояния» |
Как они связаны
scipy
┌────────┬────────┬─────────┬──────────┐
linalg optimize integrate interpolate
│ │ │ │
└────────┴────┬─────┴────────────┘
▼ все принимают и возвращают numpy-массивы
┌────────┬────────┬─────────┬──────────┐
stats signal special sparse spatial
Подмодули не изолированы: optimize часто зовёт linalg, signal опирается на FFT, stats использует special (функции распределений выражаются через гамма-функцию). Но для пользователя каждый — самостоятельная «дверь».
Правило выбора двери
Сформулируйте задачу одним глаголом — он подскажет подмодуль:
- «решить систему / разложить матрицу» →
linalg - «минимизировать / найти корень / подогнать кривую» →
optimize - «проинтегрировать / решить дифур» →
integrate - «восстановить промежуточные значения» →
interpolate - «проверить гипотезу / описать выборку» →
stats
Под капотом: ленивая загрузка
Почему import scipy не даёт сразу scipy.optimize? Потому что подмодули загружаются лениво (lazy import). Если бы один import scipy тянул всё — линейную алгебру, статистику, обработку сигналов — старт программы занимал бы заметное время и память. Поэтому вы импортируете только нужное: from scipy import optimize. Это типичная для больших библиотек инженерная экономия: платишь только за то, чем пользуешься.
Маленькая разминка «руками»
Перемножение матриц лежит в основе линейной алгебры. Реализуем его на чистом Python — позже SciPy сделает это в одну строку и в сотни раз быстрее:
A = [[1, 2],
[3, 4]]
B = [[5, 6],
[7, 8]]
# C = A * B (матричное умножение 2x2)
C = [[0, 0], [0, 0]]
for i in range(2):
for j in range(2):
for k in range(2):
C[i][j] += A[i][k] * B[k][j]
for row in C:
print(row)
Вывод:
[19, 22] [43, 50]
Частые ошибки
- Искать функцию не в том подмодуле. Решение СЛАУ — в
linalg, а не вoptimize. - Ждать, что
import scipyдаст всё. Из-за ленивой загрузки нужно импортировать подмодуль явно. - Путать
integrate(интегралы/ОДУ) иoptimize(минимумы/корни). Это разные классы задач.
Итог
- SciPy = девять тематических подмодулей; под каждую задачу — своя «дверь».
- Формулируйте задачу глаголом — он укажет подмодуль.
- Подмодули загружаются лениво и импортируются явно.
- Все они общаются через NumPy-массивы.