[TOC]

概述

文章参考:https://blog.csdn.net/sn_gis/article/details/79015488

在Eigen中,所有的矩阵Matrix和向量Vector都是由Matrix类构造的。向量只不过是矩阵的特殊形式,只有一列(列向量)或者一行(行向量)。

模板参数

Matrix 类有6个模板参数,现在我们了解前三个足够。剩下的三个参数都有默认值,后面会探讨,现在不管他。
Matrix 的三个强制的模板参数:

1
Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>
  • Scalar 就是矩阵元素标量类型。
  • RowsAtCompileTime 和ColsAtCompileTime 分别指代编译时候的行和列值。
  • Eigen中提供了许多typedefs ,例如Matrix4f 是4*4的float型矩阵:
1
typedef Matrix<float, 4, 4> Matrix4f;

构造函数

默认的构造函数不执行任何空间分配,也不初始化矩阵的元素。

1
2
Matrix3f a;
MatrixXf b;
  • a是一个3*3的矩阵,分配了float[9]的空间,但未初始化内部元素;
  • b是一个动态大小的矩阵,现在它的尺寸是0*0,还未分配空间。

带参数的构造函数。

对于矩阵,行数在列数前面,对于向量,只有向量的大小。当对矩阵或向量指定大小时,只是分配相应大小的空间,未初始化元素。

1
2
MatrixXf a(10,15);
VectorXf b(30);

为了对固定大小和动态大小的矩阵提供统一的API,对指定大小的Matrix传递sizes也是合法的(传递也被忽略)。

1
Matrix3f a(3,3);

可以用构造函数提供4以内尺寸的vector的初始化。

1
2
3
Vector2d a(5.0, 6.0);
Vector3d b(5.0, 6.0, 7.0);
Vector4d c(5.0, 6.0, 7.0, 8.0);

Vectors

正如前面提到的那样,在Eigen中,vectors 只是一种特殊形式的矩阵,有一行或者一列。在大多数情况下一列比较多,这样的向量也叫做列向量,也简称向量。其他情况叫做行向量。

例如typedef Vector3f 是一个(列)向量,它的定义如下:

1
typedef Matrix<float, 3, 1> Vector3f;

同样我们也提供了行向量的定义:

1
typedef Matrix<int, 1, 2> RowVector2i;