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. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinдва целых числаRиC— число строк и столбцов матрицы. - Читает следующие
Rстрок; каждая содержит ровноCцелых чисел через пробел. Создаёт двумерный массивMчерезnp.array(..., dtype=int)формы(R, C). - Вычисляет
ranks = np.argsort(M, axis=0). Каждый элементranks[i, j]— это номер строки исходной матрицы, которая занимаетi-ю позицию по возрастанию в столбцеj. - Выводит в
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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- NumPy sort по axis=0 и axis=1 без изменения исходного массива
- dtype NumPy: целые и вещественные массивы, типы элементов
- NumPy shape, ndim, size и dtype: атрибуты массива и задача
- Срезы двумерного массива NumPy: строки, столбцы и шаг
- NumPy reshape и transpose: разница на примере и задача
- NumPy newaxis и squeeze: вектор-строка и вектор-столбец
