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

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

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

Найди и исправь: перепутаны axis в np.sort и индексы vs значения в argsort

Что уже дано

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

В редакторе есть сломанный код. В нём допущены ровно три ошибки в трёх независимых строках:

  1. Первый вызов np.sort использует axis=1, хотя нужно отсортировать каждый столбец по возрастанию (то есть нужен axis=0).
  2. Второй вызов np.sort использует axis=0, хотя нужно отсортировать каждую строку по возрастанию (то есть нужен axis=1).
  3. Вместо применения результата np.argsort к исходному массиву через fancy indexing код выводит сами индексы idx вместо переставленных значений vals[idx].

Каждая ошибка — в отдельной строке. Исправьте ровно три строки.

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

Исправьте три ошибочные строки так, чтобы программа:

  1. Читала из stdin два целых числа R и C.
  2. Читала следующие R строк по C целых чисел — двумерный массив M формы (R, C).
  3. Читала ещё одну строку с C целыми числами — одномерный массив vals длины C.
  4. Вычисляла col_sorted = np.sort(M, axis=0) — каждый столбец M отсортирован по возрастанию, shape (R, C).
  5. Вычисляла row_sorted = np.sort(M, axis=1) — каждая строка M отсортирована по возрастанию, shape (R, C).
  6. Вычисляла idx = np.argsort(vals) и выводила vals[idx] — значения vals в отсортированном порядке.
  7. Выводила в stdout ровно три блока:
  • строка col_sorted shape=(R, C), затем R строк матрицы col_sorted;
  • строка row_sorted shape=(R, C), затем R строк матрицы row_sorted;
  • строка vals sorted: <значения через пробел>.

Ввод и вывод

Программа читает 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}
vals_0 vals_1 ... vals_{C-1}

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

col_sorted shape=(R, C)
<строки col_sorted через пробел>
row_sorted shape=(R, C)
<строки row_sorted через пробел>
vals sorted: vals_sorted_0 vals_sorted_1 ...
О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

Проверяется тестами (1)
  • Тест 1
    Ввод
    3 3
    3 1 4
    1 5 2
    6 3 8
    9 2 7
    Ожидаемый вывод
    col_sorted shape=(3, 3)
    1 1 2
    3 3 4
    6 5 8
    row_sorted shape=(3, 3)
    1 3 4
    1 2 5
    3 6 8
    vals sorted: 2 7 9
Решение
Как проверяется решение

Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

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