저는 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 일 의미한다. 라벨과
매트릭스 :
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 |
그리고이 행렬 I 쉽게 × 3 행렬에 새로운 요소를 형성하기 위해 그룹화 된 요소의 합계 수
. 세 번째 열과 행은 레이블 값이 더 낮기 때문에 앞/위쪽으로 이동했습니다 (1 대 2 및 3).질문 : numpy로 이런 식으로 행렬을 정렬하는 방법은 무엇입니까? 나는 다른 질문을 검색하여 lexsort, 레코드 배열 및 기타 항목을 찾았지만 numpy에 대한 많은 경험이없는 사람으로서 필자는 내가 원하는 정렬을 수행하기가 어려웠다. 사전에
감사합니다!
아 네,'numpy.lexsort'와 함께 이제는 작동하는 해결책이 생겼습니다. 색인을 사용하여 목록을 생성하기 위해 lexsort를 사용합니다. –