Eigen Matrix详解
[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 | Matrix3f a; |
- a是一个3*3的矩阵,分配了float[9]的空间,但未初始化内部元素;
- b是一个动态大小的矩阵,现在它的尺寸是0*0,还未分配空间。
带参数的构造函数。
对于矩阵,行数在列数前面,对于向量,只有向量的大小。当对矩阵或向量指定大小时,只是分配相应大小的空间,未初始化元素。
1 | MatrixXf a(10,15); |
为了对固定大小和动态大小的矩阵提供统一的API,对指定大小的Matrix传递sizes也是合法的(传递也被忽略)。
1 | Matrix3f a(3,3); |
可以用构造函数提供4以内尺寸的vector的初始化。
1 | Vector2d a(5.0, 6.0); |
Vectors
正如前面提到的那样,在Eigen中,vectors 只是一种特殊形式的矩阵,有一行或者一列。在大多数情况下一列比较多,这样的向量也叫做列向量,也简称向量。其他情况叫做行向量。
例如typedef Vector3f 是一个(列)向量,它的定义如下:
1 | typedef Matrix<float, 3, 1> Vector3f; |
同样我们也提供了行向量的定义:
1 | typedef Matrix<int, 1, 2> RowVector2i; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦溪·在路上!
评论
ValineDisqus