У меня квадратная матрица NxN. Эта матрица часто довольно велика (N около 5000), и я хочу объединить части этой матрицы, чтобы сделать меньшую матрицу.Сортировка строк и столбцов матрицы другим списком с numpy
Следовательно, у меня есть список с N элементами, и эти элементы обозначают, какие строки/столбцы должны быть сгруппированы вместе в новой матрице.
Чтобы сделать алгоритм немного проще и быстрее, я хочу сортировать строки и столбцы на основе приведенного выше списка.
Пример:
Входной 5x5 матрица:
row/col | 1 | 2 | 3 | 4 | 5 |
1 | 5 | 4 | 3 | 2 | 1 |
2 | 10 | 9 | 8 | 7 | 6 |
3 | 15 | 14 | 13 | 12 | 11 |
4 | 20 | 19 | 18 | 17 | 16 |
5 | 25 | 24 | 23 | 22 | 21 |
Для того, чтобы быть ясно: первая строка [5 4 3 2 1] и первый столбец [5, 10, 15, 20, 25].
список, содержащий «метка», которые обозначают, какие строки и столбцы должны быть сгруппированы вместе в новой матрице:
[2 2 1 3 3]
Это означает, что новая матрица будет 3х3 (у нас есть 3 различных значений).
матрица с этикетками:
labels 2 1 3
--------- ---- ---------
row/col | 1 | 2 | 3 | 4 | 5 |
2 | 1 | 5 | 4 | 3 | 2 | 1 |
2 | 2 | 10 | 9 | 8 | 7 | 6 |
1 | 3 | 15 | 14 | 13 | 12 | 11 |
3 | 4 | 20 | 19 | 18 | 17 | 16 |
3 | 5 | 25 | 24 | 23 | 22 | 21 |
Ожидаемая сортируется матрица:
row/col | 3 | 1 | 2 | 4 | 5 |
3 | 13 |15 | 14 | 12 | 11 |
1 | 3 | 5 | 4 | 2 | 1 |
2 | 8 |10 | 9 | 7 | 6 |
4 | 18 |20 | 19 | 17 | 16 |
5 | 23 |25 | 24 | 22 | 21 |
И с этой матрицей можно легко подвести сгруппированных элементов для формирования нового элемента в матрице 3х3. Обратите внимание, что третий столбец и строка перемещены в начало/сверху, потому что оно имеет меньшее значение метки (1 против 2 и 3).
Вопрос: как сортировать матрицу таким образом с помощью numpy? Я искал другие вопросы и нашел lexsort, записывал массивы и другие вещи, но, как кто-то, у кого не было большого опыта работы с numpy, мне было трудно выполнить сортировку, которую я хотел.
Заранее благодарен!
А да, вместе с 'numpy.lexsort' У меня теперь есть решение, которое работает. Я использую lexsort для создания списка с индексами. –