eigen库的矩阵操作(Eigen/Dense类)

Eigen使用实践 Eigen使用实践 一、安装 Eigen 1、sudo apt-get install libeigen3-dev 2、sudo updatedb 3、locate eigen3 二、Eigen简单使用 #include <iostream> using namespace std; #include <ctime> //Eigen核心部分 #include <eigen3/Eigen/Dense> //稠密矩阵的代数运算(逆,特征值等) #include &l 阅读详情
// 来自高翔SLAM十四讲
#include<iostream>
#include<ctime>
#include<eigen3/Eigen/Core>
// 稠密矩阵的代数运算(逆、特征值等)
#include<eigen3/Eigen/Dense>

using namespace std;

#define MATRIX_SIZE 5

int main(){
	// eigen以矩阵为基本数据元素。它是一个模板类。它的前三个参数为:数据类型,行,列
	// 声明一个2*3的float矩阵
	Eigen::Matrix<float,2,3> matrix23;
	// 同时,eigen通过typedef提供了许多内置类型,不过底层仍旧是eigen::Matrix
	// 例如:Vector3d实质上是Eigen::Matrix<double,3,1>
	Eigen::Vector3d v_3d;
	// Matrix3d实质上是Eigen::Matrix<double,3,3>
	Eigen::Matrix3d matrix33 = Eigen::Matrix3d::Zero();	// 初始化为0
	// 如果大小不确定的矩阵,可以使用动态大小的矩阵
	Eigen::Matrix<double, Eigen::Dynamic, -1> matrix_dynamic;
	// 更简单的
	Eigen::MatrixXd matrix_x;
	// 还有很多类似的类型,自己看吧

	// 下面是对矩阵的操作
	// 输入数据
	matrix23 << 1,2,3,4,5,6;	// 重载了 <<
	// 输出
	cout<<matrix23<<endl;

	// 用()访问矩阵中的元素
	for(int i=0; i<1; i++){
		for(int j=0; j<2; j++){
			cout<<matrix23(i,j)<<endl;
		}
	}

	v_3d << 3,2,1;
	// 矩阵与向量相乘(实际上仍然是矩阵和矩阵)
	// 不同类型的矩阵不能相乘
	// Eigen::Matrix<double, 2, 1> result = matrix23 * v_3d;

	// 应该显式转换
	Eigen::Matrix<double, 2, 1> result = matrix23.cast<double>() * v_3d;
	cout<< result <<endl;

	// 生成随机的矩阵
	matrix33 = Eigen::Matrix3d::Random();
	cout<< matrix33 <<endl;

	// 转置
	cout<< matrix33.transpose() <<endl;
	// 各个元素的和
	cout<< matrix33.sum() <<endl;
	// 迹
	cout<< matrix33.trace() <<endl;
	// 数乘
	cout<< 10*matrix33 <<endl;
	// 逆
	cout<< matrix33.inverse() <<endl;
	// 行列式
	cout<< matrix33.determinant() <<endl;

	// 特征值
	// 是对称矩阵可以保证对角化成功
	Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> eigen_solver(matrix33.transpose() * matrix33);
	cout<<" eigen value = "<<eigen_solver.eigenvalues() <<endl;	// 特征值
	cout<<"eigen vector = "<<eigen_solver.eigenvectors() <<endl;	// 特征向量

	// 解方程
	// 我们求解matrix_NN * x = v_Nd 这个方程
	// 直接求逆当然是最简单的,但是直接求逆的计算量特别大
	Eigen::Matrix<double, MATRIX_SIZE, MATRIX_SIZE>matrix_NN;
	matrix_NN = Eigen::MatrixXd::Random(MATRIX_SIZE,MATRIX_SIZE);
	Eigen::Matrix<double, MATRIX_SIZE, 1> v_Nd;
	v_Nd = Eigen::MatrixXd::Random(MATRIX_SIZE, 1);

	// 计时
	clock_t time_stt = clock();
	// 直接求逆
	Eigen::Matrix<double, MATRIX_SIZE, 1> x = matrix_NN.reverse() * v_Nd;
	cout<<" time use in normal inverse is "<< 1000 * (clock() - time_stt)/(double)CLOCKS_PER_SEC << "ms"<<endl;

	// 通常用矩阵分解来求,例如QR分解,速度会快很多,然而这边显示时间却慢很多
	time_stt = clock();
	x  = matrix_NN.colPivHouseholderQr().solve(v_Nd);
	cout<<"time use in Qr composition is "<<1000 * (clock() - time_stt)/(double)CLOCKS_PER_SEC<<"ms"<<endl;

	cout<<endl;
	return 0;
}

 

视觉SLAM十四讲中第3讲Eigen实践中程序报错 本文主要是在《视觉SLAM十四讲》中第三讲eigen实战环节遇到了一些小问题,提供了解决方案 阅读详情

相关推荐

Eigen初始化及基本操作大全

    Eigen常用操作   Eigen3安装: ubuntu如何安装Eigen   1. 常用头文件 #include <Eigen/Dense> //包含了下面的Core/Geometry/LU/Cholesky/SVD/QR/Eigenvalues模块 #include <Eigen/Core> // 包含Matrix和Array类,基础的线性代...

踏雪飞鸿的博客 3万+

致命错误:Eigen/Dense:没有那个文件或目录

致命错误:Eigen/Dense:没有那个文件或目录 实际就是编译器找不到这个头文件了,首先要看看是不是已经安装了Eigen3(在/usr/local/include或者/usr/include目录). 如果没有,到官网下载一个,解压到/usr/local/include或者/usr/include目录 官网:http://eigen.tuxfamily.org/index.php?title=Main_Page 或者通过apt安装:sudo apt-get install libeigen3-dev 安装

qq_35854617的博客 1万+

Eigen高阶操作总结 — 子矩阵、块操作

鉴于中文资料中Eigen资料鱼目混珠,纷乱庞杂。现参考Eigen官网,整理常用Eigen矩阵操作。 基于版本:/usr/include/eigen3/Eigen/src/Core/util/Macros.h显示的3.2.92 矩阵块操作 a. 定义 Eigen中的矩阵块操作使用 .block() 指令,有2中版本: 意义 动态size (dynamic-size) 固定size (fi...

mmLxfz的博客 1万+

Eigen库的主要函数及用法

Eigen矩阵运算主要函数

scott198512的博客 7118

海康机器人ID5000 系列智能读码器(三)

又過了兩個月,漸漸的對這個攝像頭的功能更加熟悉了,而實際上,我要做的功能也越來越複雜,從一開始的讀碼,到後來的通過讀二維碼控制設備,再到未讀到二維碼控制設備等,下面就對具體的細項做一個總結。了解完這些就能對ID5000這個設備,乃至很多海康的設備都能做一個二次開發。

qq_54359036的博客 3071

11.15 分析finrl 的框架

11.15 分析finrl 的框架

yueguoqing88的博客 1083

Eigen/Dense常用的用途

是Eigen库中的一个模块,主要提供了稠密矩阵和向量的基本操作和功能。这只是Eigen/Dense模块的一部分功能,该模块还包含了许多其他功能和优化,使其成为进行线性代数运算的强大工具。Eigen提供了丰富的运算符重载和函数,用于执行矩阵和向量之间的基本运算,如加法、减法、乘法等。Eigen提供了一些特殊类型的矩阵,如对角矩阵、三角矩阵等,可以方便地进行构造和运算。Eigen支持向量的点积、叉积,以及矩阵的转置、共轭等代数运算。模块包含了很多用于处理常见的矩阵和向量操作的类和函数。

weixin_50531046的博客 1208

FANUC机器人RSR与PNS功能深度解析及实战应用指南

本文深度解析了FANUC机器人RSR(远程程序启动)与PNS(程序号选择)两大核心功能。文章详细阐述了RSR的队列执行机制与PNS的二进制编码原理,提供了从硬件连接到参数配置的完整实战指南,并分享了混合使用策略与常见故障排除方法,旨在帮助工程师实现高效、稳定的生产线自动化程序调度。

neovim7hacker的博客 308

【Eigen】 3.4.90 库快速参考Dense matrix and array manipulation

Dense matrix and array manipulation密集矩阵和数组操作模块和头文件Eigen库被划分为一个核心模块和若干附加模块。每个模块都有一个对应的头文件,需要包含该头文件才能使用该模块。Dense和Eigen头文件提供了一种方便的方式来一次性访问多个模块。模块头文件内容Core#include <Eigen/Core>矩阵和数组类,基础线性代数(包括三角形和自伴...

cxyhjl的博客 1211

使用C#调用百度地图并实现坐标点的设置以及读取

使用C#调用百度地图申请百度地图密钥以及查看百度API程序实现功能:最终图利用webBrowser控件展示地图 申请百度地图密钥以及查看百度API 网址:http://lbsyun.baidu.com/apiconsole/key#/home 网址:http://lbsyun.baidu.com/jsdemo.htm#c1_3 程序实现功能: 1、输入网址那可以调用本地的html文件,也可以访问其他网站 2、输入坐标、添加坐标按钮,可以将坐标值传入html文件中,显示在经纬度的文本框中 3、定位按钮可以

qq_39261042的博客 3734

工业相机图像格式深度解析:从Mono8到Mono12的选型与应用

本文深度解析工业相机黑白图像格式,重点对比Mono8、Mono10与Mono12的核心差异。文章从位深、动态范围和数据量等关键概念切入,详细阐述了不同格式的优缺点及适用场景,为工业视觉项目中的相机选型提供实战指南,帮助用户在精度、速度与成本间做出最优决策。

weixin_29207439的博客 262

【Eigen】Chapter1 矩阵与数组操作 Dense Matrix and Arrary Manipulation

Eigen学习

ASUNAchan的博客 879

YOLOv11全方位改进指南:卷积层、轻量化、注意力、损失函数等创新优化一览

YOLOv11通过八大核心模块的创新设计,在保持YOLO系列实时性的同时显著提升检测精度。本文提出的可变形卷积DCNv4多模态注意力动态解耦头等创新方案,已在工业质检、自动驾驶、无人机巡检等领域成功应用。完整项目地址预训练模型:包含从nano到x六个规格在线演示创新声明首次在YOLO系列集成DCNv4,小目标检测AP提升8.2%提出多模态混合注意力(MMAttention),兼顾通道与空间关系动态标签分配策略使训练效率提升40%

QQ_778132974的博客 1019

Eigen/Dense实战:用矩阵分块操作优化图像处理算法

本文深入探讨了如何利用Eigen/Dense库的矩阵分块操作优化图像处理算法。通过分析零成本抽象和惰性求值机制,结合图像卷积、区域统计等实战案例,详细展示了使用.block()等方法避免数据拷贝、提升计算效率的技巧,帮助开发者编写高性能的C++图像处理代码。

weixin_29008691的博客 368

【ACP】2025-最新-疑难题解析-1

即用户手动释放时,因实例释放保护开启,不会释放该 ECS 实例(不同云厂商具体实现有差异,但题目场景下选 C )。结合题目中标记,答案为。综上,答案选 B。综上,答案选 C。综上,答案选 D。综上,答案选 A。综上,答案选 A。综上,答案选 C。综上,答案选 D。综上,答案选 A。

jundao1997的专栏 364

百度百科 X-Bk-Token 算法还原

百度百科 X-Bk-Token 算法还原

自成背后的博客 1万+

VS2019: 无法调用 Eigen/Dense 等文件

VS2019 无法调用 Eigen/Dense 等文件 Eigen是一个有关矩阵运算的库,在官网下载压缩文件之后,解压到本地,比如 D: 盘, 解压出来的名字是一串无意义的字符,然后重命名为 Eigen,然后在程序中使用, #include <Eigen/Dense> 会有编译错误 ,无法打开 “Eigen/Dense” 文件。 正确使用Eigen的解决方案: 1,下载,并解压...

NikolaTesla1856的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Eigen/Dense模块完全攻略:从基础矩阵操作到特征值分解实战

本文深入解析Eigen/Dense模块在C++线性代数运算中的核心应用,涵盖从基础矩阵操作到高级特征值分解的实战技巧。针对SLAM和计算机视觉等场景,详细介绍了矩阵类型选择、内存布局优化、表达式模板性能秘诀以及线性方程组求解策略,帮助开发者高效处理矩阵运算并优化数值计算性能。

nut55的博客 187

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

无法打开 Eigen/Dense 等文件

Eigen是一个有关矩阵运算的库,在官网下载压缩文件之后,解压到本地,比如 D: 盘, 解压出来的名字是一串无意义的字符,然后重命名为 Eigen,然后在程序中使用, #include "Eigen/Dense"   会有编译错误 ,无法打开 "Eigen/Dense"   文件。事实上,我再环境变量,工程包含文件,都已经把路径包含进去,很是无奈,偶然找到解决方案。 正确使用Eigen的解决方

Cinderella_hou的博客 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Eigen中Dense 模块简要介绍和实战应用示例(最小二乘拟合直线、协方差矩阵计算和稀疏求解等)

模块是 Eigen 的核心模块之一,主要用于处理密集矩阵(Dense Matrix)和向量(Dense Vector)。它与 Eigen 的稀疏矩阵模块()互补。特点支持固定和动态大小固定大小:如Matrix3dVector4f动态大小:如MatrixXdVectorXd优势:固定大小矩阵在编译期优化,速度快;动态大小矩阵灵活性高。面向表达式模板(Expression Templates)Eigen 的运算不是立即计算,而是构建表达式树优点:减少临时变量、延迟计算、优化性能高性能。

qq_36812406的博客 890

Eigen库头文件分析

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

小红鱼的博客 1864

Eigen库的那些坑(一)

Eigen库的那些坑(一) 在此开一个专题,专门记录一些在使用Eigen库过程中遇到过的一些大坑。说多了,都是一把辛酸泪……好了,正文开始 Eigen内存对齐问题 在跑点云融合实验时,编译的时候遇到了报错: /usr/include/eigen3/Eigen/src/Core/DenseStorage.h:128: Eigen::internal::plain_array<T, Size...

图像处理、SLAM、PCL、OpenCV爱好者 1万+

无法打开源文件eigen3/Eigen/Dense----解决办法

首先,确保你已经从 Eigen 的官方网站(http://eigen.tuxfamily.org)下载了 Eigen 库。将下载的库解压到你喜欢的位置,例如。你可以在代码中添加一段简单的测试代码,以确认 Eigen 库是否正确配置。确保你的 C++ 代码中的包含语句与你添加的路径匹配。例如,如果 Eigen 库在。点击get it下边的压缩包下载。

weixin_45813121的博客 2688

Eigen/Dense矩阵操作实战:从基础运算到高效求解线性方程组

本文深入探讨了Eigen/Dense库在C++中进行稠密矩阵操作的核心技术与实战应用。从矩阵定义、初始化、基础运算入手,重点解析了转置、求逆等进阶操作的陷阱与正确用法,并对比了多种矩阵分解方法(如PartialPivLU、ColPivHouseholderQR、LLT/LDLT)在高效求解线性方程组时的性能差异与选择策略,帮助开发者规避常见错误,提升科学计算效率。

weixin_29008691的博客 107

Eigen3第一期——Dense matrix and array manipulation/The Matrix class

C++是我这个行业的主要语言,所以还是需要认真的学习一下,Eigen3是C++生态中非常重要的第三方库,主要完成矩阵的计算,我找了一下没找到成熟的学习教程,和后面发现官网上有纯英文教程。所以现在决定跟着网上官方教程走一遍,即学习了c++还顺带学习了英语,岂不是double win?所以本系列算是Eigen3教程也算是网页汉化。大部分为网页翻译,也会有部分个人批注。

weixin_51009494的博客 807
上一篇: cout输出精度为小数点后几位
下一篇: 矩阵的几何变换(Eigen/Geometry类)
rdc01234
博客等级 码龄9年 10粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值