我有一個正方形的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 |
而與此矩陣I可以很容易地求和分組元素,以在所述3×3矩陣的新元素。請注意,第三列和第三行已移至前/後,因爲它的標籤值較低(1對2和3)。
問題:如何用numpy以這種方式對矩陣進行排序?我搜索了其他問題,發現了lexsort,記錄陣列和其他東西,但作爲一個沒有太多numpy經驗的人,我發現很難完成我想要的排序。
在此先感謝!
啊,是的,和'numpy.lexsort'一起,我現在有一個可行的解決方案。我使用lexsort生成帶有索引的列表。 –