我的Eigen学习笔记

我的Eigen学习笔记_第1张图片
本文介绍C++矩阵分析模板库Eigen的基本用法与实用技巧,内容持续更新。

文章目录

  • Eigen模块
  • 数据类型
    • Matrix 与 Vector 类模板
    • Map 的用法
  • 操作指南
    • 元素索引
    • 矩阵操作
  • 刚体变换
    • Affine 与 Transform 类模板
  • 资源汇总

Eigen模块

转载自此文。

  • Core #include,包含Matrix和Array类,基础的线性代数运算和数组操作。
  • Geometry #include,包含旋转,平移,缩放,2维和3维的各种变换。
  • LU #include,包含求逆,行列式,LU分解。
  • Cholesky #include,包含LLT和LDLT Cholesky分解。
  • SVD #include,包含SVD分解。
  • QR #include,包含QR分解。
  • Eigenvalues #include,包含特征值,特征向量分解。
  • Sparse #include,包含稀疏矩阵的存储和运算。
  • Dense #include,包含了Core/Geometry/LU/Cholesky/SVD/QR/Eigenvalues模块。
  • Eigen #include,包含Dense和Sparse。

对于新手,如果不清楚具体需要哪些,就引用 #include 就对了。

数据类型

Matrix 与 Vector 类模板

Eigen库最基本的模板是Eigen::Matrix,定义如下:

Matrix<typename Scalar, 
       int RowsAtCompileTime, 
       int ColsAtCompileTime,
       int Options = 0,
       int MaxRowsAtCompileTime = RowsAtCompileTime,
       int MaxColsAtCompileTime = ColsAtCompileTime>

参数为“类型”、“行数”、“列数”、“比特标志位”、“运行时最大行数”、“运行时最大列数”。后三个参数不常用,且有默认值。初始化矩阵时,可以指定行数和列数,此时空间被分配;也可以指定为 Dynamic 即动态大小,此时不分配空间。
简单起见,Matrix模板有很多衍生模板,例如:

  • Matrix3d——Matrix
  • MatrixXd——Matrix
  • Vector3f——Matrix
  • RowVector3i——Matrix

上述定义可以节省代码量,同时可以看出 Vector 实际上就是将一个维度指定为 1 的 Matrix。

Map 的用法

Map 类是 Eigen 的原生缓存接口,用于复用内存中的数据,相比于copy更加节省空间。Map类可以很好地解决C++数据与Eigen数据类型转换的问题。它没有构造函数,需要指定一个指针用于传递数据。

操作指南

元素索引

Matrix不同于C++数组,不可以用 [] 运算符进行索引,但是Vector却可以。

矩阵操作

获取Matrix的行列数可以通过rows()cols()size() 函数。通过 resize() 可以重新调整矩阵大小。矩阵支持常规的运算,如 + - * / += -= *= /= ,但是注意操作数元素类型要相同。

刚体变换

Affine 与 Transform 类模板

资源汇总

  • Eigen官网
  • 非官方:Eigen库使用指南

你可能感兴趣的:(Code,and,IDE,c++)