我有一个N x N的方阵。这个矩阵通常很大(N约为5000),我想聚合这个矩阵的部分,以生成一个较小的矩阵。
因此,我有一个包含N个元素的列表,这些元素表示应在新矩阵中将哪些行/列分组在一起。
为了使算法更容易和更快速,我希望根据上述列表对行和列进行排序。
例如:
输入5x5矩阵:
要明确的是:第一行是[5 4 3 2 1],第一列是[5、10、15、20、25]。
包含“标签”的列表指示哪些行和列应该在新矩阵中分组在一起:
这意味着新矩阵将是3x3的(我们有3个不同的值)。
带有标签的矩阵:
预期排序矩阵:
使用这个矩阵,我可以轻松地对分组元素求和,形成一个新的3x3矩阵元素。请注意,第三列和行已经移到了前面/顶部,因为它具有较低的标签值(1与2和3相对比)。
问题是:如何使用numpy按这种方式对矩阵进行排序?我查找了其他问题,并发现了lexsort、record arrays和其他东西,但作为一个没有太多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]
这意味着新矩阵将是3x3的(我们有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 |
使用这个矩阵,我可以轻松地对分组元素求和,形成一个新的3x3矩阵元素。请注意,第三列和行已经移到了前面/顶部,因为它具有较低的标签值(1与2和3相对比)。
问题是:如何使用numpy按这种方式对矩阵进行排序?我查找了其他问题,并发现了lexsort、record arrays和其他东西,但作为一个没有太多numpy经验的人,我很难实现我想要的排序。
提前感谢!
numpy.lexsort
。我使用 lexsort 生成带有索引的列表。 - Lucas van Dijk