我有一个大小为
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
。然而,我想知道是否有比这更优雅/更有效的解决方案。
这就是你的目的吗?
#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