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()可動態對矩陣形狀進行轉化

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