Сортировка массивов: 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) — это гарантия, а не случайность.
Отдельно стоит отметить: это справедливо только при указании числового axis — 0, 1 и так далее. Есть режим axis=None, который сначала разворачивает массив в одномерный и сортирует его целиком, — но в этом уроке он не используется, и его поведение принципиально другое.
Практический способ проверки: после любого вызова np.sort или np.argsort сразу смотрите на .shape результата. Если входной массив имел shape (r, c), выходной должен тоже показать (r, c). Расхождение означает, что где-то затесался axis=None или лишний вызов flatten.
