Eigen库学习---Map类

时间:2021-09-29 03:02:34

Eigen中定义了一系列的vector和matrix,相比copy数据,更一般的方式是复用数据的内存,将它们转变为Eigen类型。Map类很好地实现了这个功能。

Map定义

 Map(PointerArgType dataPtr, Index rows, Index cols, const StrideType& stride = StrideType())

可以看出,构建map变量,需要三个信息:指向数据的指针,构造矩阵的行数和列数

map相当于引用普通的c++数组,进行矩阵操作,而不用copy数据

Eigen::MatrixXf  

动态矩阵和静态矩阵:动态矩阵是指其大小在运行时确定,静态矩阵是指其大小在编译时确定。

MatrixXd:表示任意大小的元素类型为double的矩阵变量,其大小只有在运行时被赋值之后才能知道。

Matrix3d:表示元素类型为double大小为3*3的矩阵变量,其大小在编译时就知道。

如何选择动态矩阵和静态矩阵:对于小矩阵(一般大小小于16)使用固定大小的静态矩阵,它可以带来比较高的效率;对于大矩阵(一般大小大于32)建议使用动态矩阵。注意:如果特别大的矩阵使用了固定大小的静态矩阵则可能会造成栈溢出的问题。

矩阵元素的访问:在矩阵的访问中,行索引总是作为第一个参数,Eigen中矩阵、数组、向量的下标都是从0开始。矩阵元素的访问可以通过”()”操作符完成。例如m(2, 3)既是获取矩阵m的第2行第3列元素。

针对向量还提供”[]”操作符,注意矩阵则不可如此使用。

  Eigen::MatrixXf range_wf;
const float dcenter = range_wf(u)

动态矩阵,类型是float,括号"()"用来引用下标为u的数据(这里应该是向量)

Eigen::MatrixXf::Constant(, cols_i, .f)
Constant常量向量,值为0