Eigen库的简单使用说明
Eigen库的简单使用说明
稠密矩阵和数组操作
矩阵在使用的时候默认命名空间为Eigen
矩阵类
矩阵模板
Matrix 类采用六个模板参数,其中前三个为强制模板参数
1 | Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime> |
- Scalar 为数据类型
- RowsAtCompileTime 为编译时矩阵的行数
- ColsAtCompileTime 为编译时矩阵的列数
在指定行列的大小时也可使用 Dynamic 来使矩阵定义为动态大小,如下所示
1 | Eigen::Matrix<float, 3, Eigen::Dynamic> m; |
也可使用 typedef 来定义特殊的矩阵
1 | typedef Matrix<float, 3, 1> Vector3f; |
矩阵初始化
常见的初始化方式如下所示
1 | // 1. |
固定大小与动态大小
什么时候应该使用固定尺寸,什么时候应该选择动态尺寸?
简单的答案是:尽可能将固定大小用于非常小的尺寸,而将动态大小用于较大的尺寸。
对于小尺寸,特别是对于小于(大致)16的大小,使用固定大小对性能非常有益,因为它允许Eigen避免动态内存分配和展开循环。在内部,固定大小的特征矩阵只是一个普通的数组。
矩阵元素的访问
矩阵元素的访问可以通过 () 操作符完成,例如m(2,3)即是获取矩阵m的第2行第3列元素
矩阵的相关操作
Eigen对+-*/操作符均进行了重载,直接使用即可。
其他相关操作(参考)有:
函数名 | 作用 |
---|---|
dot() | 点积 |
cross() | 叉积 |
transpose() | 转置 |
inverse() | 逆矩阵 |
conjugate() | 共轭矩阵 |
adjoint() | 伴随矩阵 |
trace() | 矩阵的迹 |
eigenvalues() | 矩阵的特征值 |
determinant() | 矩阵求行列式的值 |
diagonal() | 矩阵对角线元素 |
sum() | 矩阵所有元素求和 |
prod() | 矩阵所有元素求积 |
mean() | 矩阵所有元素求平均 |
maxCoeff() | 矩阵的最大值 |
minCoeff() | 矩阵的最小值 |
mean() | 矩阵的平均值 |
Matrix::Identity() | 单位矩阵 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 xRosemary的个人博客!