给定行索引向量,构建由一些源矩阵行组成的新矩阵

Build a new matrix made of some source matrix rows given a row index vector

我想构建一个由一些源矩阵行组成的新矩阵,给定一个非连续索引向量。

也就是说,我想要一个 row() 函数,它接受索引列表和 returns 存储在新矩阵中的行列表:

  VectorXi v = VectorXi::LinSpaced( 4, 10, 13);
  MatrixXi m = v.rowwise().replicate( 4 );
  VectorXi r1 ( ( VectorXi(3) <<  0,  3, 1 ).finished() );

  // Here is some pseudo code to create the desired matrix N :
  MatrixXi N = m.row(r1);

  cout << "m = " << m << endl;
  cout << "r1 = " << r1 << endl;
  cout << "N = " << N << endl;

期望的输出:

m = 

10 10 10 10
11 11 11 11
12 12 12 12
13 13 13 13

r1 =
0
3
1

N =
10 10 10 10
13 13 13 13
11 11 11 11

非常感谢您的帮助。

西尔万

在开发分支和(至少)启用 C++11 的情况下,您可以编写:

Eigen::MatrixXi N = m(r1,Eigen::all);

这类似于 Matlab 语法:

N = m(r1, :);

您也可以直接传递 {x,...}-列表,或任何行为类似于 std::vector<int> 的东西(必须提供 size() 函数以及 operator[] 和 return 整型),例如:

std::vector<int> c2{{3,0}};
std::cout << "m({2,1},c2) = \n" << m({2,1}, c2) << '\n';

这些表达式是可写的(假设m本身是可写的):

m({2,1}, c2) = Eigen::Matrix2i{{1,2},{3,4}};
std::cout << m << '\n';

神马演示:https://godbolt.org/z/cjacOY