犰狳中的列/行排名

问题描述 投票:0回答:1

我有一个大小为

arma::dmat X
x
4
5
,我需要按列(或者等效地,按行)计算排名。也就是说,如果
X
是由

给出的
 1.7313004 -0.07725283  0.20853594 0.8234332  1.0856281
-1.5292486  1.37488968 -0.02532876 1.9258169  0.1119688 
-0.3280515 -0.26482346  1.09408275 1.5134836 -1.1991751 
-0.3365833 -0.34169977  0.94923045 0.8330554  1.7670869

然后我想要一个像这样的

arma::umat R

4 3 3 1 2 
1 4 1 4 3
3 2 4 3 1
2 1 3 2 4

使用

arma::sort_index
,我能够获得按列堆叠的矩阵的排名,但这不是我想要的。当然,始终可以循环遍历每一列并将转换后的列保存到新矩阵
R
。然而,我想知道是否有比这更优雅/更有效的解决方案。

c++ sorting linear-algebra armadillo
1个回答
0
投票

这就是你的目的吗?

#include <armadillo> 
using namespace arma;
int main() {
  dmat X = {
    {1.7313004, -0.07725283, 0.20853594, 0.8234332, 1.0856281},
    {-1.5292486, 1.37488968, -0.02532876, 1.9258169, 0.1119688},
    {-0.3280515, -0.26482346, 1.09408275, 1.5134836, -1.1991751},
    {-0.3365833, -0.34169977, 0.94923045, 0.8330554, 1.7670869}
  };
  umat R = rank(X, true);
  cout << R << endl;
  return 0;
}

输出:

4 3 3 1 2
1 4 1 4 3
3 2 4 3 1
2 1 3 2 4
© www.soinside.com 2019 - 2024. All rights reserved.