Bootstrap

Eigen基础操作

Eigen中,所有矩阵和向量都是Matrix模板类的对象。向量只是矩阵的一种特殊情况,具有 1 行或 1 列。

1、矩阵声明

	//double类型2x3固定矩阵,编译时行列数已知
	Eigen::Matrix<double, 2, 3> A;
	//double类型3x3矩阵
	Eigen::Matrix3d A;
	//double类型3维向量
	Eigen::Vector3d vec;
	
	//动态大小矩阵,编译时行列数未知
	Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> A;
	//可简写为
	Eigen::MatrixXd A;
	Eigen::MatrixXd A(3, 3);

2、访问矩阵元素

A(i, j) //i j 下标从0开始
  1.         A(i, j)既可作为左值,也可作为右值;
  2.         向量可通过 () 或 [ ] 访问元素;
  3.         矩阵只能通过 () 访问元素,因为 [i , j] 会被认为是逗号表达式。        

3、矩阵元素赋值

A << 1, 2, 3, 4;

4、矩阵块操作

//从(i, j)开始,每行取 p 个,每列取 q 个,返回一个临时新矩阵
A.block(i, j, p, q);
//从(i, j)开始取一个 p 行 q 列的子矩阵并返回
A.block<p, q>(i j);

5、向量操作

        向量的定义如下:

//列向量
typedef Matrix<float, 3, 1> Vector3f;

//行向量
typedef Matrix<int, 1, 2> RowVector2i;
vec.head(n);    //前n个元素
vec.tail(n);    //后n个元素
vec.segment(1, n);    //从下标 i 开始,截取 n 个元素

6、高级初始化

Eigen::Matrix3f A;
A = Eigen::Matrix3f::Zero();	//全0
A = Eigen::Matrix3f::Ones();	//全1
A = Eigen::Matrix3f::Constant(val);	//全val
A = Eigen::Matrix3f::Identity();	//单位矩阵
A = Eigen::Matrix3f::Random();	//随机数值

;