原文:Eigen官网-Advanced initialization
本篇介绍几种矩阵初始化的高级方法,重点介绍逗号初始化和特殊矩阵(单位阵、零阵)。
1. 逗号初始化
(1)Eigen提供了逗号操作符允许我们方便地为矩阵/向量/数组中的元素赋值。按从左到右,从上到下的顺序列出所有元素,并用逗号进行分隔。需要注意的是,对象的尺寸需要事先指定,而且所列出的元素数目要和操作对象的尺寸大小一致。
(2)初始化列表不仅可以是数值也可以是vectors或matrices。一个常用的应用就是将不同的vector或者matrices联结到一起。需要注意的是,在使用逗号初始化方式之前必须要先设定vectors或者matrices的尺寸大小。
示例如下:
RowVectorXd vec1(3);
vec1 << 1, 2, 3;
std::cout << "vec1 = " << vec1 << std::endl;
RowVectorXd vec2(4);
vec2 << 1, 4, 9, 16;
std::cout << "vec2 = " << vec2 << std::endl;
RowVectorXd joined(7);
joined << vec1, vec2;
std::cout << "joined = " << joined << std::endl;
结果如下:
vec1 = 1 2 3
vec2 = 1 4 9 16
joined = 1 2 3 1 4 9 16
(3)也可以使用块结构对矩阵进行初始化。
示例如下:
MatrixXf matA(2, 2);
matA << 1, 2, 3, 4;
MatrixXf matB(4, 4);
matB << matA, matA/10, matA/10, matA;
std::cout << matB << std::endl;
结果如下:
1 2 0.1 0.2
3 4 0.3 0.4
0.1 0.2 1 2
0.3 0.4 3 4
(4)逗号表达式也可以用来对块表达式进行赋值。
示例如下:
Matrix3f m;
m.row(0) << 1, 2