【问题标题】:How to access multiple elements in c++ Eigen array?如何访问 C++ Eigen 数组中的多个元素?
【发布时间】:2022-07-15 05:09:10
【问题描述】:

我想检索特征数组中的某些元素并将它们作为向量返回。我使用以下代码:

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() 来检索向量。但是,我仍然想知道是否可以以更有效的方式做同样的事情。

    标签: c++ eigen matrix-indexing


    【解决方案1】:

    您可以将 test 数组重塑为一列,然后使用单索引访问运算符:

    auto res = test.reshaped()(inds.row(0) + test.rows() * inds.row(1));
    

    通常,在使用 auto 和 Eigen 表达式时要小心(这种情况很好,只要 testinds 在使用 res 时仍然有效)。

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 2021-05-20
      相关资源
      最近更新 更多