1.类型
Matrix有6个模板参数,主要使用前三个参数(元素类型,行数,列数),剩下的有默认值。
Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>
Eigen的类型主要有矩阵、向量(其实也是一种矩阵),有固定大小和动态大小之分:
typedef Matrix<float, 3, 3> Matrix3f; Matrix3f a;//固定size的矩阵,分配3*3个float的空间
typedef Matrix<double, Dynamic, Dynamic> MatrixXd; MatrixXd b;//动态size的矩阵,未分配空间;
向量:
typedef Matrix<float, 3, 1> Vector3f; //列向量,固定大小
typedef Matrix<int, 1, 2> RowVector2i; //行向量,固定大小
typedef Matrix<int, Dynamic, 1> VectorXi; //为固定大小,同理行向量
2.取元素
Matrix3f m;
m(0,0);//用括号去找括号里面对应位置的数据
m(index)也可以用于获取矩阵元素,但取决于matrix的存储顺序,默认是按列存储的。
取Matrix4f中的某个区域,m.block<3,3>(0,0) 表示从下标(0,0)开始取3*3的区域, 如果时向量,可以取前面x个元素,m.head<3>()
3.初始化
用逗号初始化
m<<1,1,1,
2,2,2,
3,3,3;
4.size的基础操作
matrix的大小可以通过rows()、cols()、size()获取,resize()(只用于动态matrix)可以重新调整动态matrix的大小。
5.Vector 通过复制自身形成一个多行数组
Vector3f m 3*1数组
ArrayXXd p(num, dim); 一个num *dim 的数组;
p = m.transpose.replicate(num,1)
得到每一行等于m的数组,共有num行
本文参考了:https://blog.csdn.net/caomin1hao/article/details/81358911