Eigen 是一个高级的 C++ 库,用于线性代数、矩阵和向量运算、数值解决以及其他数学计算。它被设计为高效、易用,并且能够与 C++ 的特性无缝集成。Eigen库广泛应用于科学计算、工程、机器学习和计算机图形学等领域。
源码:官网 或 GitLab
1. Eigen 库的主要特点:
-
性能:Eigen库非常注重性能,它利用了现代CPU的SIMD指令集(例如SSE、AVX)来加速计算。
-
内存管理:Eigen使用固定大小的模板化类来管理内存,这使得内存分配和释放都非常高效。
-
表达式模板:Eigen使用表达式模板来延迟计算,这允许在运行时优化复杂的表达式,减少不必要的计算和内存使用。
-
易用性:Eigen的API设计简洁直观,使得编写和阅读代码都很容易。
-
兼容性:Eigen库可以与多种其他库和工具链无缝集成,例如与CUDA、OpenMP等并行计算框架。
-
广泛的数学支持:Eigen提供了广泛的数学运算支持,包括但不限于矩阵乘法、分解、求逆、特征值计算、最小二乘问题等。
-
模板化:Eigen是完全模板化的,这意味着它可以处理任意大小和类型的矩阵和向量。
-
插件系统:Eigen允许通过插件扩展其功能,例如支持稀疏矩阵、非线性优化等。
-
开源:Eigen 是一个开源项目,遵循MPL2(Mozilla Public License Version 2.0)许可证。
2. 安装 Eigen 库:
有两种方式:
2.1 源码安装
1.
//下载链接
wget https://gitlab.com/libeigen/eigen /-/archive/3.4.0/eigen-3.4.0.tar.gz
//解压
tar xzvf ./eigen-3.4.0.tar.gz
//编译
cd eigen-3.4.0
mkdir build
cd build
cmake ..
//安装
make
sudo make install
可以在cmake的时候自定义路径:cmake .. -DCMAKE_INSTALL_PREFIX=/usr/envir/eigen-3.4.0 ,并使用软连接:sudo ln -s /usr/envir/eigen-3.4.0/include/eigen3/Eigen /usr/include/Eigen。
2. 编程测试:
#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;int main()
{MatrixXd m(2,2);m(0,0) = 3;m(1,0) = 2.5;m(0,1) = -1;m(1,1) = m(1,0) + m(0,1);std::cout << m << std::endl;
}
2.2 apt 命令安装
sudo apt install libeigen3-dev
eigen会默认安装到/usr/include或者/usr/local/include/下的eigen目录下,执行复制命令,将Eigen文件夹及其内容复制到/usr/inlcude/或者/usr/local/include/下:
sudo cp -r /usr/include/eigen3/Eigen /usr/include
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
说明:eigen3 被默认安装到了usr/local/include里了(或usr/include,这两个都是系统默认的路径),在很多程序中include时经常使用#include <Eigen/Dense>而不是使用#include <eigen3/Eigen/Dense>所以要做下处理,否则一些程序在编译时会因找不到Eigen/Dense而报错。上面指令将usr/local/include/eigen3文件夹中的Eigen文件递归地复制到上一层文件夹/usr/local/include中,以便系统无法默认搜索。 没有做上面的拷贝,发生找不到Eigen/Dense错误的时候,也可以再CMakeLists.txt用include_libraries(绝对路径))