NumPy: вычисления и устройство массивов

Сортировка массивов: sort и argsort

Содержание курса

Shape результатов sort и argsort: анализ по осям

Одно свойство объединяет np.sort и np.argsort: обе функции сохраняют форму входного массива. Какую бы ось вы ни указали, shape результата будет совпадать с shape входа.

Проверим это на конкретных числах.

import numpy as np

# Одномерный массив shape (4,)
arr = np.array([30, 10, 40, 20])

print(np.sort(arr).shape)     # (4,)
print(np.argsort(arr).shape)  # (4,)

# Двумерный массив shape (2, 3)
M = np.array([[3, 1, 4],
              [1, 5, 2]])

print(np.sort(M, axis=0).shape)     # (2, 3)
print(np.sort(M, axis=1).shape)     # (2, 3)
print(np.argsort(M, axis=0).shape)  # (2, 3)
print(np.argsort(M, axis=1).shape)  # (2, 3)

Во всех случаях результат — тот же (4,) или (2, 3). Смена axis меняет смысл операции (что с чем сравнивается), но не форму выхода.

Почему это важно? Потому что после сортировки или получения индексов вы можете сразу применять результат к другим операциям, не пересчитывая shape вручную. Если вошёл массив (2, 3), вышел массив (2, 3) — это гарантия, а не случайность.

Отдельно стоит отметить: это справедливо только при указании числового axis0, 1 и так далее. Есть режим axis=None, который сначала разворачивает массив в одномерный и сортирует его целиком, — но в этом уроке он не используется, и его поведение принципиально другое.

Практический способ проверки: после любого вызова np.sort или np.argsort сразу смотрите на .shape результата. Если входной массив имел shape (r, c), выходной должен тоже показать (r, c). Расхождение означает, что где-то затесался axis=None или лишний вызов flatten.