Карта подмодулей 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-массивы.
Проверьте себя
1. В каком подмодуле SciPy искать решение системы линейных уравнений Ax = b?
Ascipy.optimize
Bscipy.linalg
Cscipy.stats
Dscipy.signal
2. Почему import scipy не даёт сразу доступ к scipy.optimize?
AЭто баг SciPy
BПодмодули загружаются лениво ради экономии времени и памяти — их надо импортировать явно
Coptimize вынесен в отдельный пакет
DНужны права администратора
3. Задача «подогнать кривую к данным и найти минимум функции» — к какому подмодулю?
Ascipy.interpolate
Bscipy.integrate
Cscipy.optimize
Dscipy.sparse