Eigen库从入门到放弃(2. Getting Started)

Eigen的头文件定义了多种类型,但是对于简单的来说,使用MatrixXd就足够了,MatrixXd表示任意尺寸的矩阵,但是要注意数据类型是double的。Eigen/Dense的头文件定义了所有MatrixXd和相关类型的成员函数。所有头文件中定义的函数都是在Eigen这个命名空间下的。
我们再次分析一下上面的代码:

MatrixXd m(2,2);  // 定义两行两列,前面是行数,后面是列数m(0,0) = 3;   // (0, 0) 位置是3m(1,0) = 2.5;  // (1, 0) 位置是2.5m(0,1) = -1;m(1,1) = m(1,0) + m(0,1);   // m(1,0) 返回的是double值,直接运算

再来一个例子,将矩阵和向量结合起来:

int main()
{MatrixXd m = MatrixXd::Random(3,3);std::cout << "m_before =" << std::endl << m << std::endl;m = (m + MatrixXd::Constant(3,3,1.2)) * 50;std::cout << "m =" << std::endl << m << std::endl;VectorXd v(3);v << 1, 2, 3;std::cout << "v =" << std::endl << v << std::endl;std::cout << "m * v =" << std::endl << m * v << std::endl;
}

在这里插入图片描述

我们一起分析一下,首先调用了一个 MatrixXd::Random(3,3)来生成一个(3, 3)的随机数矩阵,对于这个函数有Numbers are uniformly spread through their whole definition range for integer types, and in the [-1:1] range for floating point scalar types.这样的解释,是说是返回一个在[-1:1]的均匀分布,同np.random.rand(3, 3),但是numpy返回的是[0, 1)范围。然后使用MatrixXd::Constant(3,3,1.2)生成一个3*3每个值都是1.2的矩阵,相当于numpy里面的fill()函数咯?
还有就是利用VectorXd v(3);来生成一个d维的列向量(注意,是列方向的,也就是[1, d]),并且使用<<来设置值,最后使用*来完成矩阵和向量的乘法,一个[3, 3]矩阵和一个[3, 1]的矩阵相乘,得到一个[3, 1]的结果。
当然,对于向量的初始化,也可以使用Matrix3d m = Matrix3d::Random(); Vector3d v(1,2,3);这样来初始化,但是对于有固定形状的变量,没有必要,等到我们后面学到动态形状你就能深深体会了。但是使用固定大小的矩阵和向量有两个优点。编译器发出更好(更快)的代码,因为它知道矩阵和向量的大小。在类型中指定大小还允许在编译时进行更严格的检查。例如,如果你尝试将Matrix4d (4 × 4矩阵)与Vector3d(大小为3的向量)相乘,编译器将会报错。然而,使用多类型会增加编译时间和可执行文件的大小。在编译时也可能不知道矩阵的大小。经验法则是对于4 × 4或更小的大小使用固定大小的矩阵(这段是直接机翻的)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619701.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读——SplitFed: When Federated Learning Meets Split Learning】

级别CCFA 1.摘要 联邦学习&#xff08;FL&#xff09;和分割学习&#xff08;SL&#xff09;是两种流行的分布式机器学习方法。两者都采用了模型对数据的场景&#xff1b;客户端在不共享原始数据的情况下训练和测试机器学习模型。由于机器学习模型的架构在客户端和服务器之间…

高中数学:三角函数-4个解题妙招

一、对偶式 1、针对题型 同角三角函数的问题 2、方法定义 对于形如下方的式子&#xff0c;就可以用对偶式方法解 3、练习 例题1 例题2 二、巧用三角函数定义 1、针对题型 没有给出具体三角函数值的问题 2、方法定义 3、练习 例题1 三、诱导公式 1、针对题型 锐…

深圳比创达电子EMC|什么是人体静电

当人体与衣物或其他物体发生相互摩擦时&#xff0c;由于各种材料对电子的束缚能力不同&#xff0c;导致电子从一种物质转移到另一种物质。这种电子的转移现象使得人体带上了静电。 如果我们无法及时有效地释放身上积聚的电荷&#xff0c;静电就会在人体表面积聚。这通常发生在…

基于 Operator 部署 Prometheus 监控 k8s 集群

目录 一、环境准备 1.1 选择版本 1.2 过滤镜像 1.3 修改 yaml 镜像 1.4 移动 *networkPolicy*.yaml 1.5 修改 service 文件 1.6 提前下载镜像并推送到私有镜像仓库 1.7 修改镜像&#xff08;可选&#xff09; 二、执行创建 三、查看 pod 状态 四、访问 prometheus、…

视频编辑软件pitivi基本功之安装篇

视频编辑软件pitivi基本功之安装篇 台式机的系统是openSUSE-Leap-15.5-DVD-x86_64 应用程序——工具——终端&#xff0c;切换到root用户 ruhonglocalhost:~> su - 密码&#xff1a; localhost:~ # zypper search pitivi localhost:~ # zypper install pitivi ruhonglocalho…

Python爬虫-京东商品评论数据

前言 本文是该专栏的第68篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者有详细介绍京东滑块验证码的解决方法,感兴趣的同学,可以直接翻阅文章《Python如何解决“京东滑块验证码”(5)》进行查看。 而本文,笔者以京东商品详情页的评论数据为例,通过…

第一节:什么是操作系统

什么是操作系统 一、一台计算机的组成部分1、计算机能干啥2、谈谈计算机硬件 二、什么是操作系统三、学习操作系统的层次 一、一台计算机的组成部分 如下图所示&#xff1a; 这就是就是构成一台计算机的组成部分 1、计算机能干啥 ∙ \bullet ∙计算机是我们专业吃饭的家伙&a…

有什么好用的财务记账软件?

易舟云财务软件是一款功能强大且易于使用的财务记账软件&#xff0c;适用于个人和小型企业。它提供了一系列财务管理工具&#xff0c;包括收支记录、会计凭证、资产负债表和利润表等。用户可以轻松录入和管理日常收支&#xff0c;生成详细的财务报表&#xff0c;帮助用户更好地…

一款免费、开源、可批量识别的离线OCR软件,适用于 Windows7 x64及以上平台

免费&#xff1a;本项目所有代码开源&#xff0c;完全免费。方便&#xff1a;解压即用&#xff0c;离线运行&#xff0c;无需网络。高效&#xff1a;自带高效率的离线OCR引擎&#xff0c;内置多种语言识别库。灵活&#xff1a;支持命令行、HTTP接口等外部调用方式。功能&#x…

神经网络模型底层原理与实现8-BERT

首先介绍什么是自监督学习&#xff1a; 普通的有监督学习是每个x对应有个y&#xff0c;x训练得到y&#xff0c;将y与y作比较&#xff0c;而自监督是没有对应y&#xff0c;直接把一部分样本x作为训练目标x&#xff0c;训练得x后和x对比 bert中如何创造x&#xff1a;以文字处理为…

【备战测开】—— 编程语言Python(二)

续上上篇的讲解&#xff1a;【备战测开】—— 编程语言Python&#xff08;一&#xff09; 6 面向对象编程 所谓的面向对象其实就是把属性和方法封装起来&#xff0c;以供重复调用 6.1 类和对象 参考博客&#xff1a;python类和对象最全详解&#xff08;持续修订中&#xff…

vue3 动态class和style

1、需求&#xff1a;一个删除的弹窗&#xff0c;点击会提示“是否需要删除XXXXX&#xff08;name&#xff09;”&#xff0c;但是name不固定&#xff0c;所以删除弹窗的width不能写死。&#xff08;如果不设置width&#xff0c;本项目的弹窗会自适应变得特别长&#xff09;