eigen库

eigen教程1
官方教程

  • example 1
#include<iostream>
#include<Eigen/Dense>
//matrix
int main1()
{
	Eigen::MatrixXd m(2, 2);
	m(0, 0) = 1;
	m(0, 1) = 2;
	m(1, 0) = 3;
	m(1, 1) = 4;
	std::cout << "m= " << std::endl << m << std::endl;
	return 0;
}
  • example2:任意矩阵VS固定矩阵

    使用固定矩阵由两大好处
    1.因为知道大小,所以编译速度更快
    2.在编译的时候有更严格的参数检查
    推荐对4*4及更小的矩阵使用固定大小的矩阵和向量

int main2_1()
{
	Eigen::MatrixXd m = Eigen::MatrixXd::Random(3, 3);//random values between -1 and 1 
	m = (m + Eigen::MatrixXd::Constant(3, 3, 1.2) )* 50;
	std::cout << "m= " << std::endl << m << std::endl;
	Eigen::VectorXd v(3);
	v << 1, 2, 3;//comma-initializer,explained in Advanced initialization
	std::cout << "m*v " << std::endl << m*v << std::endl;
	return 0;
}
int main2_2()
{
	Eigen::Matrix3d m = Eigen::Matrix3d::Random();
	m = (m + Eigen::Matrix3d::Constant(1.2) )* 50;
	std::cout << "m= " << std::endl << m << std::endl;
	Eigen::Vector3d v(1,2,3);
	std::cout << "m*v " << std::endl << m*v << std::endl;
	return 0;
}
  • Matrix 类
    在eigen中,所有的矩阵和向量都是Matrix模板类的对象
    Matrix一个有6个模板参数,前三个是强制性的模板参数,后三个参数有默认值
    Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>
    Scalar矩阵中元素的类型,可支持基本类型和自定义类型
    RowsAtCompileTime、ColsAtCompileTime为编译时要知道的行或列的数值
    Eigen实现了方便的类型定义以覆盖常见的类,typedef Matrix<float, 4, 4> Matrix4f;

  • 向量是行或列为1的矩阵,列为1的矩阵更常用,列向量常用名column-vectors,just vectors
    typedef Matrix<float, 3, 1> Vector3f
    typedef Matrix<int, 1, 2> RowVector2i;

  • 特殊的动态值
    Eigen支持在编译时大小未知的矩阵,该类型的值在Eigen中称为dynamic size,相对编译时大小已知的fixed size而言,
    typedef Matrix<double, Dynamic, Dynamic> MatrixXd;

  • 构造器(构造函数)
    通常使用默认的构造函数,不进行动态内存的分配也不初始化矩阵元素,eg.Matrix3f a;
    仅分配空间,不进行初始化的构造函数,eg.MatrixXf a(10,15);
    为了对固定大小和动态大小的矩阵提供统一的API,固定大小的矩阵也可以使用该API,只是大小数值无效
    对大小小于等于4的固定向量提供了可初始化参数的构造函数,Vector4d c(5.0, 6.0, 7.0, 8.0);

  • 元素访问
    对于矩阵,先传入行索引,再传入列索引;y也可采用单索引,单索引依赖在内存中的存储顺序,默认列优先存储,但是也可以改为行优先
    对于向量,只传入索引
    仅向量可用[]取值操作,且每次最多取一个值。
    因为在C++编译中,matrix[i,j]会被编译为matrix[j]

  • 逗号初始化
    矩阵和向量都可以采用逗号初始化方法

  • Resizing
    rows(), cols() and size()可分别获得矩阵的行、列和元素数目,
    resize()可动态对矩阵形状进行转化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章