我有一个正方形的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生成带有索引的列表。 –