我想建立一个由一些源矩阵行组成的新矩阵,给定一个不连续索引的向量。
也就是说,我想要一个row()函数,该函数获取索引列表并返回存储在新矩阵中的行列表:
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
非常感谢您的帮助。
西尔万
答案 0 :(得分:1)
启用开发分支并(至少)启用C ++ 11,您可以编写:
Eigen::MatrixXi N = m(r1,Eigen::all);
这类似于Matlab语法:
N = m(r1, :);
您还可以直接传递{x,...}
列表或任何类似std::vector<int>
的行为(必须提供size()
函数和operator[]
并返回整数类型) ,例如:
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';
Godbolt演示:https://godbolt.org/z/cjacOY