NumPy argsort по axis=0: индексы сортировки столбцов

np.argsort возвращает индексы, которые задают порядок сортировки, а не сами отсортированные значения. Для двумерного массива axis=0 означает независимую сортировку каждого столбца: полученные индексы указывают номера исходных строк.

Короткий пример

import numpy as np
a = np.array([[3, 1], [2, 4]])
indices = np.argsort(a, axis=0)
print(indices.tolist())
print(np.take_along_axis(a, indices, axis=0).tolist())

Результат:

[[1, 0], [0, 1]]
[[2, 1], [3, 4]]

У каждого столбца собственный порядок индексов. Выражение a[indices] не является общей заменой take_along_axis для этой операции: сначала уточните, по какой оси применяются индексы.

Попробуйте самостоятельно

Ниже — отдельное задание с другими данными. Напишите решение и запустите проверку кода без регистрации. Для последовательного обучения откройте курс.

Документация.

argsort по axis=0: ранги объектов в каждом столбце

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.

Что нужно сделать

Напишите программу, которая:

  1. Читает из stdin два целых числа R и C — число строк и столбцов матрицы.
  2. Читает следующие R строк; каждая содержит ровно C целых чисел через пробел. Создаёт двумерный массив M через np.array(..., dtype=int) формы (R, C).
  3. Вычисляет ranks = np.argsort(M, axis=0). Каждый элемент ranks[i, j] — это номер строки исходной матрицы, которая занимает i-ю позицию по возрастанию в столбце j.
  4. Выводит в stdout три блока:
  • строка 1: ranks shape=<shape> — shape результата np.argsort(M, axis=0);
  • строки 2..R+1: матрицу ranks — каждую строку на отдельной строке, значения через пробел;
  • строка R+2: original unchanged=<bool> — True, если M не был изменён (сравните с копией, сделанной до вычисления ranks), иначе False.

Ввод и вывод

Программа читает stdin и пишет в stdout.

Формат ввода

R C
row_0_col_0 row_0_col_1 ... row_0_col_{C-1}
...
row_{R-1}_col_0 ... row_{R-1}_col_{C-1}

Формат вывода

ranks shape=(R, C)
элементы ranks строка за строкой
original unchanged=True

Пример

Ввод
3 3
4 1 7
2 8 3
6 5 9
Вывод
ranks shape=(3, 3)
1 0 1
0 2 0
2 1 2
original unchanged=True
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи