Eigen是可以用来进行
线性代数、矩阵、向量操作等运算的C++库
,它里面包含了很多算法。。
线性代数、矩阵、向量操作等运算的C++库
,它里面包含了很多算法。当前(2023.1)最高 release 版本: 3.4.0Eigen采用模板方式实现,由于模板函数不支持分离编译,所以只能提供源码而不是动态库的方式供用户使用
。git clone git@gitlab.com:libeigen/eigen.git
git checkout 3.4.0
EIGEN_PATH
键下的值
EIGEN_PATH
添加到附加包含目录就算配置好环境了
模块 | 引入头文件 | 内容 |
---|---|---|
Core | #include<Eigen/Core> | 包含Matrix和Array类,基础的线性代数运算和数组操作 |
Geometry | #include<Eigen/Geometry> | 包含旋转,平移,缩放,2维和3维的各种变换 |
LU | #include<Eigen/LU> | 包含求逆,行列式,LU分解 |
Cholesky | \#include<Eigen/Cholesky> | 包含LLT和LDLT Cholesky分解 |
SVD | #include<Eigen/SVD> | 包含SVD分解 |
QR | #include<Eigen/QR> | 包含QR分解 |
Sparse | #include<Eigen/Sparse> | 包含稀疏矩阵的存储和运算 |
Dense | `#include<Eigen/Dense>` | 包含了Core/Geometry/LU/Cholesky/SVD/QR/Eigenvalues模块 |
Eigen | #include<Eigen/Eigen> | 包含Dense和Sparse。 |
#include <iostream>
#include <Eigen/Core>
#include <ctime>
using namespace Eigen;
using namespace std;
#define MATRIX_SIZE 2000
int main()
{
int n_a_rows = 4000;
int n_a_cols = 3000;
int n_b_rows = n_a_cols;
int n_b_cols = 200;
MatrixXi a(n_a_rows, n_a_cols);
for (int i = 0; i < n_a_rows; ++i)
for (int j = 0; j < n_a_cols; ++j) {
a(i, j) = n_a_cols * i + j;
}
MatrixXi b(n_b_rows, n_b_cols);
for (int i = 0; i < n_b_rows; ++i)
for (int j = 0; j < n_b_cols; ++j) {
b(i, j) = n_b_cols * i + j;
}
MatrixXi d(n_a_rows, n_b_cols);
clock_t begin = clock();
d = a * b;
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
std::cout << "* Time taken : " << elapsed_secs << std::endl;
}
* Time taken : 0.782