我想检索特征数组中的某些元素并将它们作为向量返回。我使用以下代码:
Eigen::ArrayXXi test;
test.resize(5,5);
test.setRandom();
Eigen::Matrix<int, 2, 3> inds;
inds<<0, 2, 3, 2, 3, 1;
auto res = test(inds.row(0), inds.row(1));
std::cout<<"test: \n"<<test <<std::endl;
std::cout<<"inds: \n"<<inds <<std::endl;
std::cout<<"res: \n"<<res <<std::endl;
输出是:
test:
730547559 -649503489 -48539462 893772102 -1038736613
-226810938 -353856438 276748203 291438716 -552146456
607950953 576018668 -290373134 466641602 -779039257
640895091 -477225175 28778235 -769652652 653214605
884005969 115899597 971155939 229713912 -737276042
inds:
0 2 3
2 3 1
res:
-48539462 893772102 -649503489
-290373134 466641602 576018668
28778235 -769652652 -477225175
结果是一个矩阵。我注意到矩阵的对角线就是我想要的结果。我可以用res.diagonal()
检索向量。但是,我仍然想知道是否可以以更有效的方式做同样的事情。
你可以重塑test
数组到列,然后使用单索引访问运算符:
auto res = test.reshaped()(inds.row(0) + test.rows() * inds.row(1));
一般来说,使用时要小心auto
与特征表达式(这种情况很好,只要test
and inds
当res
用来)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)