转载于: https://www.cnblogs.com/houkai/p/6347408.html

Eigen是一个用于矩阵运算的跨平台C++库。

安装

下载eigen:https://gitlab.com/libeigen/eigen/-/releases

Eigen只包含头文件,因此它不需要实现编译,只需要你include到你的项目,指定好Eigen的头文件路径,编译项目即可.

方案一

下载后,解压得到文件夹中,Eigen子文件夹便是我们需要的全部;如果你想使用Eigen暂不支持的特性,可以使用unsupported子文件夹。可以把Eigen/unsupported复制到任何你需要的地方。

方案二 安装改包,其实就是把Eigen/unsupported的内容复制到“/usr/local/include/eigen3”下。在解压的文件夹下,新建build_dir,执行。

  cd build_dircmake ../make install

详见INSTALL文件即可。

模块和头文件

Eigen库被分为一个Core模块和其他一些模块,每个模块有一些相应的头文件。 为了便于引用,Dense模块整合了一系列模块;Eigen模块整合了所有模块。一般情况下,include 就够了。

Module Header file Contents
Core #include<Eigen/Core> Matrix和Array类,基础的线性代数运算和数组操作
Geometry #include<Eigen/Geometry> 旋转、平移、缩放、2维和3维的各种变换
LU #include<Eigen/LU> 求逆,行列式,LU分解
Cholesky #include <Eigen/Cholesky> LLT和LDLT Cholesky分解
Householder #include<Eigen/Householder> 豪斯霍尔德变换,用于线性代数运算
SVD #include<Eigen/SVD> SVD分解
QR #include<Eigen/QR> QR分解
Eigenvalues #include<Eigen/Eigenvalues> 特征值,特征向量分解
Sparse #include<Eigen/Sparse> 稀疏矩阵的存储和一些基本的线性运算
稠密矩阵 #include<Eigen/Dense> 包含了Core/Geometry/LU/Cholesky/SVD/QR/Eigenvalues模块
矩阵 #include<Eigen/Eigen> 包括Dense和Sparse(整合库)

一个简单的例子

CMakeList.txt

cmake_minimum_required(VERSION 3.15)
project(opencv)set(OpenCV_DIR /home/pi/programFile/opencv-3.4/build)
find_package(OpenCV REQUIRED)
set(CMAKE_CXX_STANDARD 11)
# 添加Eigen头文件
include_directories("/usr/local/include/eigen3")
find_package(Eigen3 REQUIRED)add_executable(opencv main.cpp)target_link_libraries(opencv ${OpenCV_LIBS})
#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;return 0;
}

编译并执行:g++ main.cpp -I /usr/local/include/eigen3/ -o maincpp

 3  -1
2.5 1.5

Eigen头文件定义了许多类型,所有的类型都在Eigen的命名空间内。MatrixXd代表的是任意大小(X*X)的矩阵,并且每个元素为double类型。

例2: 矩阵和向量

再看另一个例子

#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{MatrixXd m = MatrixXd::Random(3,3);m = (m + MatrixXd::Constant(3,3,1.2)) * 50;cout << "m =" << endl << m << endl;VectorXd v(3);v << 1, 2, 3;cout << "m * v =" << endl << m * v << endl;return 0;
}

输出为:

m =94 89.8 43.5
49.4  101 86.8
88.3 29.8 37.8
m * v =
404
512
261

程序中定义了一个任意大小的矩阵,并用3*3的随机阵初始化。MatrixXd::Constant创建一个3*3的常量矩阵。

VectorXd表示列向量,并用逗号初始化语法来初始化。

再看同样功能的代码

#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{Matrix3d m = Matrix3d::Random();m = (m + Matrix3d::Constant(1.2)) * 50;cout << "m =" << endl << m << endl;Vector3d v(1,2,3);cout << "m * v =" << endl << m * v << endl;return 0;
}

MatrixXd表示是任意尺寸的矩阵,Matrix3d直接指定了3*3的大小。Vector3d也被直接初始化为[1,2,3]’的列向量。

使用固定大小的矩阵或向量有两个好处:编译更快;指定大小可以进行更为严格的检查。当然使用太多类别(Matrix3d、Matrix4d、Matrix5d…)会增加编译时间和可执行文件大小,原则建议使用4及以内的。

Eigen教程(1)之简介相关推荐

  1. Eigen教程1 - 基础

    Eigen教程1 - 基础 参考:https://blog.csdn.net/xuezhisdc/article/details/54619853 固定大小的矩阵和向量 /** 参考链接:http:/ ...

  2. cutelyst教程_01 _简介

    Tutorial_01_Intro 教程_01 _简介 Daniel Nicoletti edited this page on Feb 20, 2019 · 9 revisions Daniel N ...

  3. [医疗信息化][DICOM教程]DICOM标准简介

    [医疗信息化][DICOM教程]DICOM标准简介 使用OsiriX的DICOM标准简介 内容 介绍 什么是DICOM 医院系统内的图像传输 了解DICOM服务 OsiriX提供的DICOM服务 其他 ...

  4. Android精通教程-Android入门简介

    前言 大家好,我是 Vic,今天给大家带来Android精通教程-Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease ...

  5. 手把手的K-means聚类算法教程(含简介及教育数据应用实例 Python实现)

    手把手的K-means聚类算法教程(含简介及教育数据应用实例 Python实现) 1. K-MEANS的基本原理 2. 数据预处理 2.1 数据读取:from Excel 2.2 数据预处理:标准化Z ...

  6. 【乐绘派】Audition专业音频后期制作教程 | 1-软件简介

    Audition专业音频后期制作教程 | 1-软件简介

  7. node-red教程1 node-red简介

    编者的话 • 一个偶然的机会,认识了node-red.这种拖拽控件编写代码的方式给了我很深刻的印象.由于我平时工作偏向硬件,所以对这些华丽的前端技术技术不是很了解,但个人认为,node-red技术在搭 ...

  8. Eigen教程:1 Eigen简介和矩阵常见操作

    文章目录 一. 模块和头文件 二. 矩阵 1. 矩阵类型 2. 数据存储 3. 动态矩阵和静态矩阵 4. 矩阵元素的访问 5. 设置矩阵的元素 6. 重置矩阵大小 7. 矩阵和向量的算术运算 8. 行 ...

  9. Eigen教程(8)

    整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 原生缓存的接口:Map类 这篇将解释Eigen如何与原生raw C/C++ 数组混合 ...

最新文章

  1. php高级技术考试题,PHP高级技术考试题.doc
  2. 机器学习笔记(时间序列):不同类型的图示
  3. 剖析Disruptor:为什么会这么快?(一)锁的缺点
  4. 可穿戴设备对企业的积极意义
  5. java linq_LINQ和Java
  6. Arcgis10安装说明
  7. JVM GC调优总结 -Xms -Xmx -Xmn -Xss
  8. Android 几种解析XML文件方式的区别
  9. python学习之老男孩python全栈第九期_day012知识点总结
  10. IdentityServer4 中文文档与实战
  11. Java selenium 设置代理
  12. html超链接能post吗,通过html超链接进行POST
  13. php把文字转换unicode,unicode编码转换:PHP将汉字转换成Unico_php
  14. 划分子网(计算机网络)
  15. 原生汇率计算器系统源代码
  16. 磁共振检查头部能检测出什么_头部核磁共振可以检查什么?
  17. java生成报文_生成xml报文方法并输出
  18. 2020 - 04 - 30 个人笔记
  19. git垃圾箱的使用方法
  20. java word上传下载_JSP实现word文档的上传,在线预览,下载

热门文章

  1. 解决服务器被黑上不了网的问题
  2. Nginx 静态文件服务器搭建及autoindex模块解析
  3. yum安装:zabbix-web-4.2.8-1.el7.noarch: [Errno 256] No more mirrors to try
  4. 解压后缀.tar.gz的软件包
  5. python3中input()方法报错traceback变量未定义的解决方法
  6. Asp.net MVC应用在IIS7上部署后403错误解决方案
  7. 处理quartz 异常 Couldn‘t retrieve trigger: No record found for selection of Trigger with key:
  8. 解决vue addRoutes多次添加路由重复问题。
  9. su: Authentication failure 的解决方案
  10. nginx 启动报错 “/var/run/nginx/nginx.pid“ failed” 解决方法