矩阵类 Eigen中所有矩阵和向量都是矩阵模板类的对象,向量是矩阵的特列(仅有1行或1列); 矩阵类模板 1、矩阵类共有六个模板参数; 2、其中前三个较为重要; 3、后三个一般采用默认值; 关键点 Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime, int Options = 0, int MaxRowsAtCompileTime = RowsAtCompileTime, int MaxColsAtCompileTime = ColsAtCompileTime >
为方便起见,Eigen中定义了许多常用情况的矩阵和向量的简写形式: typedef Eigen::Matrix<float, 4, 4> Matrix4f; typedef Matrix<float, 3, 1> Vector3f; typedef Matrix<int, 1, 2> RowVector2i; typedef Matrix<double, Dynamic, Dynamic> MatrixXd; typedef Matrix<int, Dynamic, 1> VectorXi; Matrix<float, 3, Dynamic> 矩阵类构造函数 1、矩阵模板类有默认构造函数; 2、该函数不分配任何内存空间而且不初始化矩阵元素;
代码片段:可切换语言,无法单独设置文字格式 3、构造函数中也可则增加矩阵尺寸数据,构造函数会按照尺寸分配空间,但是未初始化矩阵元素;
代码片段:可切换语言,无法单独设置文字格式 4、提供可以初始化小型固定尺寸列向量的构造函数(尺寸可达4);
访问矩阵元素 1、Eigen中主要的访问方法是重载括号运算符; 2、对矩阵而言,行序号在列序号前;对于向量,仅有一个序号;排序从0开始:
3、语法m(index)不仅可在向量中使用,也可在矩阵中使用:这意味着矩阵中按照元素顺序方法,具体取决于矩阵内部的存储顺序,默认情况下都采用以列为基础的存储顺序:
4、运算符[]可重载为向量访问符号,C++中[]只能接纳一个参数,因此只能用于向量访问,不可访问矩阵; 逗号初始化 矩阵和向量元素可以方便地使用逗号初始化对元素赋初值:
矩阵尺寸调整 1、矩阵当前尺寸:rows()、cols()、size()分别返回矩阵的行数、列数、和元素数量; 2、动态矩阵可使用函数resize()调整尺寸;
注:conservativeResize(),改变矩阵尺寸不改变元素值,具体参考: https://eigen./dox/classEigen_1_1PlainObjectBase.html#a712c25be1652e5a64a00f28c8ed11462 赋值 1、赋值是赋值一个矩阵到另一个矩阵,即使用符号“=”; 2、Eigen自动调整=左边的矩阵以满足右边矩阵尺寸,针对动态矩阵;
固定大小 vs 动态大小 固定矩阵:用于小型矩阵,尤其是尺寸小于16,更有利于性能,避免动态分配内存和循环 动态矩阵:用于大型矩阵或不得不使用; 注:本文参考自https://eigen./dox/group__TutorialMatrixClass.html |
|