Eigen Matrix 详解 |
您所在的位置:网站首页 › matrix应用 › Eigen Matrix 详解 |
Eigen Matrix 详解 在Eigen中,所有的matrices 和vectors 都是模板类Matrix 的对象,Vectors 只是一种特殊的矩阵,行或者列为1. Matrix的前三个模板参数 Matrix 类有6个模板参数,现在我们了解前三个足够。剩下的三个参数都有默认值,后面会探讨,现在不管他。 Matrix 的三个强制的模板参数: Matrix
Scalar 就是矩阵元素标量类型。 RowsAtCompileTime 和ColsAtCompileTime 分别指代编译时候的行和列值。 Eigen中提供了许多typedefs ,例如Matrix4f 是4*4的float型矩阵: typedef Matrix Matrix4f;
Vectors 正如前面提到的那样,在Eigen中,vectors 只是一种特殊形式的矩阵,有一行或者一列。在大多数情况下一列比较多,这样的向量也叫做列向量,也简称向量。其他情况叫做行向量。 例如typedef Vector3f 是一个(列)向量,它的定义如下: typedef Matrix Vector3f;
同样我们也提供了行向量的定义: typedef Matrix RowVector2i;
特殊值Dynamic 当然,Eigen 不局限于在编译时候确定大小的矩阵。模板参数RowsAtCompileTime 和ColsAtCompileTime 可以传入特殊的值Dynamic ,来标志在编译时大小无法确定,需要当做运行时变量来处理。在中的术语叫做动态大小,与之相应的在编译时确定大小的叫做固定大小。 例如typedef MatrixXd,指的是元素为double,大小为动态的: typedef Matrix MatrixXd;
类似 typedef VectorXi如下: typedef Matrix VectorXi;
当然你可以定义一个固定行的,列是动态的float矩阵如下: Matrix
构造器 总是会有默认的构造器,不会进行动态内存分配,也不会初始化矩阵元素。 Matrix3f a; MatrixXf b;
这里,a是一个3*3的元素,其中还有一个float[9]数组,其中的元素没有初始化;b是一个动态大小的矩阵,目前的大小是0*0,它的元素数组完全没有分配。 构造器中全入大小的构造器也是有的,行是先传入的。对于向量,直接传入向量大小。他们会分配元素数组,但是不会初始化元素。 MatrixXf a(10,15); VectorXf b(30);
这里,a是10x15动态矩阵,数组内存已经分配,但是没有初始化;b是一个大小为30的向量,数组内存已经分配,但是元素没有初始化。 为了提供统一的API ,在固定类型的矩阵上指定大小也是合法的,例如: Matrix3f a(3,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);
逗号初始化 void fun3() { Eigen::Matrix3f m; m |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |