Matrix&Vector的运算

原文地址:http://eigen.tuxfamily.org/dox/group__TutorialMatrixArithmetic.html

本章主要对矩阵、向量和标量之间的计算做一些简要介绍

介绍

为了实现矩阵(向量)之间的计算,Eigen 同时提供了运算符重载(+、-、×、/ 等)和类方法(dot()、corss() 等)两大形式的工具。对于 Matrix 类,重载的运算符只支持线性代数相关算法。例如,matrix1*matrix2意味着矩阵之间的点乘,vector+scalar是不被允许的表达式。如果你需要数组操作而非线性代数计算,可参考这里。

加减运算

加减运算符左右的矩阵必须有相同的尺寸,也必须有相同的元素类型,Eigen不支持自动类型提升。以下为运算符示例:a+b、a-b、-a、a+=b、a-=b

矩阵与标量的乘除

矩阵乘或者除以标量的方法也很简单,例如:matrix/scalar、m*s、s*m、m/=s、m*=s

表达式注意事项

这里描述的是 Eigen 的高阶特性,具体内容可以参考这里,本节我们稍微提一下。在 Eigen 中算术运算符并不做实际的计算,这些运算符只是返回一个被标识要做相关计算的对象,真实的计算发生在对整个表达式求值的时候,一般是遇见赋值等号的时候。这样做有利于编译器做优化。举个例子:

VectorXf a(50), b(50), c(50), d(50);
...
a = 3*b + 4*c + 5*d;

Eigen 将上面的表达式编译为一个 for 循环,在不考虑其他优化(如 SIMD)的情况下可以等价为如下代码:

for(int i = 0; i < 50; ++i)a[i] = 3*b[i] + 4*c[i] + 5*d[i];

译者注:如果所有的实际计算发生在运算符出现的地方,那么上面的代码最少需要三个 for循环分别迭代b、c、d这三个矩阵,和一个for循环比起来在循环次数上后者是前者的1/3

所以不要怕使用非常长的算术表达式,长的算术表达式便于编译器做优化。

转置和共轭

译者注:因为很久没有接触线性代数了,很多概念已经很生疏,故不对本小结再做翻译,以防出错。本小结主要介绍了一些求解矩阵特殊解的方法,例如求转置的transpose()等

矩阵与矩阵和矩阵与向量之间的乘法

矩阵与矩阵(向量)之间的乘法使用运算符*,例如:a*b、a*=b

默认情况下 Eigen 在做矩阵乘法的时候会生成一个临时变量来保存计算值,然后赋予等号左边的变量。如果你确定你不需要临时变量,可以使用noalias() 方法

点乘与叉乘

Eigen使用 dot() 和 cross() 实现点乘和叉乘。
...

基本的算术约简运算

Eigen 提供了一些约简方法,将矩阵和向量转化为一个标量值。例如元素求和方法 sum()、元素乘积方法 prod()、最大元素方法 maxCoeff()、最小元素方法 minCoeff()。求对角元素之和可以使用方法 trace() 也可以使用 a.diagonal().sum() 方法。

计算合法性检查

Eigen 将检查你的运算是否合法。Eigen 会在编译或者运行时检查运算的有效性。那些在编译期间无法检查到的问题会在运行时进行检查。Debug 模式下 Eigen 会使用断言来检查计算的有效性与合法性,Release模式下如果出现非法运算,程序将直接崩溃并退出。

转载于:https://www.cnblogs.com/jiahu-Blog/p/11337129.html

Eigen 3.3.7 MatrixVector的运算相关推荐

  1. Eigen 学习文档: 矩阵和向量运算

    Eigen 学习文档: 矩阵和向量运算 本页旨在提供有关如何使用Eigen在矩阵.向量和标量之间执行算术的概述和一些详细信息. 介绍 Eigen通过重载常见的 C++ 算术运算符(如 +.-.*)或通 ...

  2. Eigen教程(3)之矩阵和向量的运算

    转载于:https://www.cnblogs.com/houkai/p/6348044.html 矩阵和向量的运算 提供一些概述和细节:关于矩阵.向量以及标量的运算. 介绍 Eigen提供了matr ...

  3. Eigen入门之密集矩阵 6 - Reductions, visitors and broadcasting

    简介 本文介绍一下Dense Matrix的3中操作: reduction, visitor, broadcasting. 归约计算reduction. Eigen的归约计算是这样的一类计算,它是对矩 ...

  4. Eigen(4)矩阵基本运算

    矩阵和向量的运算 提供一些概述和细节:关于矩阵.向量以及标量的运算. 1. 介绍 Eigen提供了matrix/vector的运算操作,既包括重载了c++的算术运算符+/-/*,也引入了一些特殊的运算 ...

  5. Day2 : SLAM Eigen库的入门学习教程(CS2240 Interactive Computer Graphics)

    Eigen库介绍 Eigen is an open-source linear algebra library implemented in C++. It's fast and well-suite ...

  6. Eigen 学习文档

    This is the documentation for Eigen3 Eigen 学习文档: Matrix 类 Eigen 学习文档: 矩阵和向量运算 Eigen 学习文档: Array类 和元素 ...

  7. 假期作业二:主成分分析:步骤、应用及代码实现。代码可以用任何你熟悉的编程语言。

    第二次作业:主成分分析:步骤.应用及代码实现.代码可以用任何你熟悉的编程语言. 主成分分析: 一.基本概念和相关理解: 1.基本概念 在用统计方法研究多变量的课题时,变量个数太多就会增加课题的复杂性. ...

  8. 视觉SLAM十四讲读书笔记(5)P40-P52

    目录 Q:什么是eigen Q:正交矩阵的定义和性质 Q:什么是特殊正交群 Q:什么叫齐次坐标 Q:什么是特殊欧氏群 Q:什么是运算符重载 Q:什么是g2o Q:什么是sophus Q:什么是eige ...

  9. 开源3D激光(视觉)SLAM算法汇总(持续更新)

    目录 一.Cartographer 二.hdl_graph_slam 三.LOAM 四.LeGO-LOAM 五.LIO-SAM 六.S-LOAM 七.M-LOAM 八.livox-loam 九.Liv ...

  10. 【R语言】入门与数据结构sumNotes

    本系列笔记均为本人根据基因学苑王通老师视频课学习所做 在此再次感谢老师 基本操作 工作路径 getwd() setwd() .Rprofile 默认设置文件 赋值 <-(Alt±) <&l ...

最新文章

  1. 99.99%准确率!AI数据训练工具No.1来自中国
  2. 爬虫 spider08——爬取腾讯娱乐新闻【使用redis去重】
  3. 风变编程课 囚徒困境 答案_当您对所有这些有用的在线编程课程感到不知所措时,如何摆脱困境...
  4. keytool使用方法总结
  5. 手动搭建latex公式渲染服务器
  6. Linux下JRE添加字体
  7. KVM halt-polling机制分析
  8. 一加手机怎么root权限_一加手机怎么解除root权限
  9. 用HTML+CSS做一个漂亮简单的个人网页——樱木花道篮球3个页面 学生个人网页设计作品 学生个人网页模板 简单个人主页
  10. html5怎么给图片加边框,怎么给图片加边框 【解决模式】
  11. Airtest 之 poco 避坑大法
  12. ROS机器人学习历程三:Publisher 和Subscriber
  13. 数字化转型,有你有我
  14. PHP MySQL 连接数据库
  15. windows系统的定时任务
  16. python读取excel成绩表,并设置柱状图
  17. 小程序稻草人图床神器,前后端开源
  18. android web连接问题,Android WebView或手机浏览器打开连接问题解决办法总结
  19. wsl 2和vmware player不兼容
  20. matmul/mm 函数用法介绍

热门文章

  1. [笔记]远传中继的实现
  2. Maven - error in opening zip file
  3. 在Tomcat中部署web项目的三种方式
  4. oracle脚本转mpp脚本,范本:使用expdp/impdp克隆生成一个新数据库
  5. js 禁用和解除禁用按钮_js禁用button,js 将某个按钮禁用5秒钟
  6. 在建工地扬尘在线监控系统推荐_关于印发《建设工地扬尘在线监控管理平台建设工作方案》的通知...
  7. IP地址,子网掩码,默认网关,DNS服务器是什么意思?
  8. docker 镜像注册【图文教程】
  9. hervorgehen ( aus ... )
  10. CSocket 和CAsyncSocket类介绍