Eigen教程(1)之简介
转载于: 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)之简介相关推荐
- Eigen教程1 - 基础
Eigen教程1 - 基础 参考:https://blog.csdn.net/xuezhisdc/article/details/54619853 固定大小的矩阵和向量 /** 参考链接:http:/ ...
- cutelyst教程_01 _简介
Tutorial_01_Intro 教程_01 _简介 Daniel Nicoletti edited this page on Feb 20, 2019 · 9 revisions Daniel N ...
- [医疗信息化][DICOM教程]DICOM标准简介
[医疗信息化][DICOM教程]DICOM标准简介 使用OsiriX的DICOM标准简介 内容 介绍 什么是DICOM 医院系统内的图像传输 了解DICOM服务 OsiriX提供的DICOM服务 其他 ...
- Android精通教程-Android入门简介
前言 大家好,我是 Vic,今天给大家带来Android精通教程-Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease ...
- 手把手的K-means聚类算法教程(含简介及教育数据应用实例 Python实现)
手把手的K-means聚类算法教程(含简介及教育数据应用实例 Python实现) 1. K-MEANS的基本原理 2. 数据预处理 2.1 数据读取:from Excel 2.2 数据预处理:标准化Z ...
- 【乐绘派】Audition专业音频后期制作教程 | 1-软件简介
Audition专业音频后期制作教程 | 1-软件简介
- node-red教程1 node-red简介
编者的话 • 一个偶然的机会,认识了node-red.这种拖拽控件编写代码的方式给了我很深刻的印象.由于我平时工作偏向硬件,所以对这些华丽的前端技术技术不是很了解,但个人认为,node-red技术在搭 ...
- Eigen教程:1 Eigen简介和矩阵常见操作
文章目录 一. 模块和头文件 二. 矩阵 1. 矩阵类型 2. 数据存储 3. 动态矩阵和静态矩阵 4. 矩阵元素的访问 5. 设置矩阵的元素 6. 重置矩阵大小 7. 矩阵和向量的算术运算 8. 行 ...
- Eigen教程(8)
整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 原生缓存的接口:Map类 这篇将解释Eigen如何与原生raw C/C++ 数组混合 ...
最新文章
- php高级技术考试题,PHP高级技术考试题.doc
- 机器学习笔记(时间序列):不同类型的图示
- 剖析Disruptor:为什么会这么快?(一)锁的缺点
- 可穿戴设备对企业的积极意义
- java linq_LINQ和Java
- Arcgis10安装说明
- JVM GC调优总结 -Xms -Xmx -Xmn -Xss
- Android 几种解析XML文件方式的区别
- python学习之老男孩python全栈第九期_day012知识点总结
- IdentityServer4 中文文档与实战
- Java selenium 设置代理
- html超链接能post吗,通过html超链接进行POST
- php把文字转换unicode,unicode编码转换:PHP将汉字转换成Unico_php
- 划分子网(计算机网络)
- 原生汇率计算器系统源代码
- 磁共振检查头部能检测出什么_头部核磁共振可以检查什么?
- java生成报文_生成xml报文方法并输出
- 2020 - 04 - 30 个人笔记
- git垃圾箱的使用方法
- java word上传下载_JSP实现word文档的上传,在线预览,下载
热门文章
- 解决服务器被黑上不了网的问题
- Nginx 静态文件服务器搭建及autoindex模块解析
- yum安装:zabbix-web-4.2.8-1.el7.noarch: [Errno 256] No more mirrors to try
- 解压后缀.tar.gz的软件包
- python3中input()方法报错traceback变量未定义的解决方法
- Asp.net MVC应用在IIS7上部署后403错误解决方案
- 处理quartz 异常 Couldn‘t retrieve trigger: No record found for selection of Trigger with key:
- 解决vue addRoutes多次添加路由重复问题。
- su: Authentication failure 的解决方案
- nginx 启动报错 “/var/run/nginx/nginx.pid“ failed” 解决方法