当前位置: 首页 > news >正文

【理解线性代数】(四)线性运算的推广与矩阵基础

1. 数值加法和乘法

数值加法与乘法,是小学数学课程中的基本数学运算。例如:

加法:1+1=2
乘法:2*2=4

在这个知识层次下,运算的基本单位是数字。

2. 从数值到向量

数值加法,可以看作一维空间中的向量加法,即:

加法:(1) + (1) = (2)

数值乘法,可以看作一维空间中的向量乘法,即:

乘法:(2) * (2) = 2 * 2 * cos(0) = 4

通过将数值推广成一维向量,实现了数值和向量概念的统一。在这个知识层次下,向量是运算的基本单位。

3. 向量到矩阵

向量加法和乘法,总是两两进行运算,这种运算比较简单。

现实应用中,往往需要对很多向量组成的向量集合进行批量运算,向量批量运算有何规律?为了研究向量的批量运算,需要将一个向量集合视为一个整体,这个整体看起来是矩形的数字阵列,所以叫做 矩阵。例如下图是一个矩阵,此矩阵由 (a, b, c) 和 (d, e, f) 两个三维向量组成:
( a b c d e f ) \begin{pmatrix} a & b & c\\ d & e & f \end{pmatrix} (adbecf)

矩阵的行数表示向量个数,矩阵的列数表示向量的维度。

目前,矩阵仅仅表示多个向量的组合,没有其他任何含义,不需要想得太复杂。

下面将根据我们自己的理解,对矩阵运算规则进行推导,然后再和教科书上的运算规则进行比对,从而验证我们的理论。

3.1 矩阵加法

矩阵加法含义很简单,就是一组向量加上另外一组向量,对应位置的向量相加即可。因为向量相加,必须在两个向量之间进行,所以矩阵相加,两个相加的矩阵包含的向量个数必须相等,否则会因为缺少向量而无法进行。

可以正确进行的矩阵加法如下:
( a 1 b 1 c 1 d 1 e 1 f 1 ) + ( a 2 b 2 c 2 d 2 e 2 f 2 ) = ( a 1 + a 2 b 1 + b 2 c 1 + c 2 d 1 + d 2 e 1 + e 2 f 1 + f 2 ) \begin{pmatrix} a1 & b1 & c1\\ d1 & e1 & f1 \end{pmatrix} + \begin{pmatrix} a2 & b2 & c2\\ d2 & e2 & f2 \end{pmatrix} = \begin{pmatrix} a1+a2 & b1+b2 & c1+c2\\ d1+d2 & e1+e2 & f1+f2 \end{pmatrix} (a1d1b1e1c1f1)+(a2d2b2e2c2f2)=(a1+a2d1+d2b1+b2e1+e2c1+c2f1+f2)

无法进行的矩阵加法如下:
( a 1 b 1 c 1 d 1 e 1 f 1 ) + ( a 2 b 2 c 2 ) = 非法 \begin{pmatrix} a1 & b1 & c1\\ d1 & e1 & f1 \end{pmatrix} + \begin{pmatrix} a2 & b2 & c2 \end{pmatrix} = 非法 (a1d1b1e1c1f1)+(a2b2c2)=非法

3.2 矩阵乘法

下面从简单向复杂推导矩阵乘法运算规则。

3.2.1 1行3列矩阵 * 1行3列矩阵

设矩阵A:
A = ( a 1 b 1 c 1 ) A= \begin{pmatrix} a1 & b1 & c1 \end{pmatrix} A=(a1b1c1)

和矩阵B
B = ( a 2 b 2 c 2 ) B= \begin{pmatrix} a2 & b2 & c2 \end{pmatrix} B=(a2b2c2)

进行乘法运算,因为只有两个向量,可以尝试将这两个向量进行点乘运算,即:
A ∗ B = a 1 a 2 + b 1 b 2 + c 1 c 2 = ( a 1 a 2 + b 1 b 2 + c 1 c 2 ) A * B = a1a2 + b1b2 + c1c2 = (a1a2 + b1b2 + c1c2) AB=a1a2+b1b2+c1c2=(a1a2+b1b2+c1c2)

结果是一个数值,也可以看作是一个一维向量。

分析:
矩阵A包含1个三维向量,矩阵B包含1个三维向量,矩阵B可以代表三维空间中的一个一维空间,所以A中的所有向量投影到B,最终的结果变成了一个一维向量,符合我们对向量点乘及矩阵的理解。

3.2.2 2行3列矩阵 * 1行3列矩阵

增加矩阵A的行数,设矩阵A:
A = ( a 1 b 1 c 1 d 1 e 1 f 1 ) A= \begin{pmatrix} a1 & b1 & c1 \\ d1 & e1 & f1 \end{pmatrix} A=(a1d1b1e1c1f1)

和矩阵B
B = ( a 2 b 2 c 2 ) B= \begin{pmatrix} a2 & b2 & c2 \end{pmatrix} B=(a2b2c2)

进行乘法运算,尝试分别进行点乘运算,即:
A ∗ B = ( a 1 a 2 + b 1 b 2 + c 1 c 2 d 1 a 2 + b 1 b 2 + c 1 c 2 ) A * B = \begin{pmatrix} a1a2 + b1b2 + c1c2 \\ d1a2 + b1b2 + c1c2 \end{pmatrix} AB=(a1a2+b1b2+c1c2d1a2+b1b2+c1c2)

结果矩阵是一个2行1列的矩阵。

分析:
矩阵A包含2个三维向量,矩阵B包含1个三维向量,矩阵B可以代表三维空间中的一个一维空间,所以A中的所有向量投影到B,最终的结果变成了2个一维向量,符合我们对向量点乘及矩阵的理解。

3.2.3 2行3列矩阵 * 2行3列矩阵

设矩阵A:
A = ( a 1 b 1 c 1 d 1 e 1 f 1 ) A= \begin{pmatrix} a1 & b1 & c1 \\ d1 & e1 & f1 \end{pmatrix} A=(a1d1b1e1c1f1)

和矩阵B
B = ( a 2 b 2 c 2 d 2 e 2 f 2 ) B= \begin{pmatrix} a2 & b2 & c2 \\ d2 & e2 & f2 \end{pmatrix} B=(a2d2b2e2c2f2)

进行乘法运算,尝试分别进行点乘运算,即:
A ∗ B = ( a 1 a 2 + b 1 b 2 + c 1 c 2 a 1 d 2 + b 1 e 2 + c 1 f 2 d 1 a 2 + e 1 b 2 + f 1 c 2 d 1 d 2 + e 1 e 2 + f 1 f 2 ) A * B = \begin{pmatrix} a1a2 + b1b2 + c1c2 & a1d2+b1e2+c1f2\\ d1a2 + e1b2 + f1c2 & d1d2+e1e2+f1f2 \end{pmatrix} AB=(a1a2+b1b2+c1c2d1a2+e1b2+f1c2a1d2+b1e2+c1f2d1d2+e1e2+f1f2)

结果矩阵是一个2行2列的矩阵。

分析:
矩阵A包含2个二维向量,矩阵B包含2个三维向量,矩阵B可以代表三维空间中的一个二维平面空间(两条线组成一个面),所以A中的所有向量投影到B,最终的结果变成了2个二维向量,符合我们对向量点乘及矩阵的理解。

这个矩阵乘法稍微有些复杂,但有计算过程中有一个量没变,那就是矩阵A中向量的个数等于变换结果矩阵中向量的个数,即矩阵A的行数和变换结果矩阵的行数相等。在行数相等不变的情况下,只能将向
量点乘的结果按列依次向后摆放,最终,结果矩阵的列数,和矩阵B的行数相同。

3.2.4 矩阵不能相乘的情况

如果两个矩阵列数不同,也就是维度不同,还能相乘吗?

不能,因为向量点乘要求两个向量具有相同的维度,如果两个矩阵列数不同,矩阵中的向量互相无法进行点乘。不同维度的向量,坐标个数不一样,无法做乘法。

所以,两个矩阵相乘,必须乘号两边的矩阵有相同的维度。

3.2.5 推广


A ∗ B = C A * B = C AB=C
为例。

只要矩阵A和矩阵B的列数相同,不管矩阵A、矩阵B各自有多少行,都可以进行相乘。并且有:

  • 结果矩阵C包含的向量个数和A中的向量个数相同,投影过程是一个线性变换,向量个数不会增加也不会减少,故投影前后向量个数不变。
  • 结果矩阵C的向量维度和矩阵B的维度相同,因为矩阵C包含的向量,是矩阵A向矩阵B的投影,所以它们全部位于矩阵B所代表的空间中,所以C和B的维度必然相同。

3.2.6 验证复杂矩阵相乘:2行3列矩阵 * 3行3列矩阵

设矩阵A:
A = ( a 1 b 1 c 1 d 1 e 1 f 1 ) A= \begin{pmatrix} a1 & b1 & c1 \\ d1 & e1 & f1 \end{pmatrix} A=(a1d1b1e1c1f1)

和矩阵B
B = ( a 2 b 2 c 2 d 2 e 2 f 2 g 2 h 2 i 2 ) B= \begin{pmatrix} a2 & b2 & c2 \\ d2 & e2 & f2 \\ g2 & h2 & i2 \end{pmatrix} B= a2d2g2b2e2h2c2f2i2

进行乘法运算,结果为:
A ∗ B = ( a 1 a 2 + b 1 b 2 + c 1 c 2 a 1 d 2 + b 1 e 2 + c 1 f 2 a 1 g 2 + b 1 h 2 + c 1 i 2 d 1 a 2 + e 1 b 2 + f 1 c 2 d 1 d 2 + e 1 e 2 + f 1 f 2 d 1 g 2 + e 1 h 2 + f 1 i 2 ) A * B = \begin{pmatrix} a1a2 + b1b2 + c1c2 & a1d2+b1e2+c1f2 & a1g2+b1h2+c1i2\\ d1a2 + e1b2 + f1c2 & d1d2+e1e2+f1f2 & d1g2+e1h2+f1i2 \end{pmatrix} AB=(a1a2+b1b2+c1c2d1a2+e1b2+f1c2a1d2+b1e2+c1f2d1d2+e1e2+f1f2a1g2+b1h2+c1i2d1g2+e1h2+f1i2)

结果矩阵是一个2行3列的矩阵。

分析:
矩阵A包含2个三维向量,矩阵B包含3个三维向量,矩阵B可以代表三维空间中的一个三维立体子空间,所以A中的所有向量投影到B,最终的结果变成了2个三维向量,符合我们对向量点乘及矩阵的理解。

3.2.7 和书本理论进行比较

书本上的矩阵规则和我们理解的矩阵只有一点不同。还是以
A ∗ B = C A * B = C AB=C
为例。

书本上将矩阵B,进行了转置。也就是说,B矩阵中的向量,按照我们的理解,应该一行一行依次摆放,但是书本上规定应该竖着依次摆放。为什么?因为书本规定,矩阵A乘矩阵B,矩阵A的每一个行向量要和矩阵B的每一个列向量进行点乘,而我们的运算规则是矩阵A的每一个行向量要和矩阵B的每一个行向量进行点乘,所以在书本上规定的运算规则下,必须将向量B进行转置。其实运算结果和原理是完全一样的。

3.2.8 特别的变换

如果矩阵B为三行三列的单位矩阵(单位矩阵用E表示),即
B = E = ( 1 0 0 0 1 0 0 0 1 ) B = E = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} B=E= 100010001

任意一个m行3列的矩阵A,乘以矩阵B,都等于矩阵A本身,即
A ∗ B = A ∗ E = A A * B = A * E = A AB=AE=A

这个大家可以自己尝试演算一下。我们这里不做演算,我们这里做一个理论分析:

B矩阵为单位矩阵时,B矩阵所代表的空间,和当前的整个三维空间完全重合。矩阵A乘矩阵B,就是将矩阵A变换到原空间,而且不改变向量的长度,那么变换结果必然也和A重合,也就是说结果等于A。通过分析,我们可以很容易地理解,为什么一个矩阵乘以单位矩阵,结果是它本身。


下一篇:《矩阵乘法进阶》

相关文章:

【理解线性代数】(四)线性运算的推广与矩阵基础

1. 数值加法和乘法 数值加法与乘法,是小学数学课程中的基本数学运算。例如: 加法:112 乘法:2*24 在这个知识层次下,运算的基本单位是数字。 2. 从数值到向量 数值加法,可以看作一维空间中的向量加法&…...

C# 什么是继承和派生

C# 什么是继承和派生 在 C# 中,继承(Inheritance)是一种机制,它允许一个类(子类)从另一个类(父类)中继承属性和方法。这种关系使得子类可以重用父类的代码,同时可以在子…...

无涯教程-JavaScript - HEX2BIN函数

描述 HEX2BIN函数将十六进制数转换为二进制数。 语法 HEX2BIN (number, [places])争论 Argument描述Required/Optionalnumber 您要转换的十六进制数。 数字不能超过10个字符(40位)。数字的最高有效位是符号位(从右数第40位)。其余的39位是幅度位。 负数使用二进制补码表示。…...

前端面试0906

// 请给出输出结果 function foo(){ console.log(a); } function bar(){ var a 3; console.log(this.a); foo(); } var a 2; bar(); 2 2 // 请从下面的问题中挑选3道进行回答 1. 防抖和节流分别是什么,一般用在什么场景? 防抖(Debounc…...

OceanBase社区版4.x核心技术解密

数字化时代,各行各业的数据量呈现爆发式增长,对于海量数据价值的挖掘和应用,正成为推动创新的主要力量,与此同时,数据计算复杂度正在提升。在此背景下,对于数据处理的基石数据库而言,正面临市场…...

快速安装k8s

RKE安装方式 官方文章资源地址 https://rke.docs.rancher.com/installation rke工具下载地址(arm,amd,windows都有) https://github.com/rancher/rke/releases x86的用amd64下载rke工具 https://github.com/rancher/rke/releases/download/v1.4.8/rke_li…...

[FFmpeg] 常用ffmpeg命令

去水印 ffmpeg -i water.jpeg -strict -2 -vf delogox300:y250:w56:h18:show0 no_water.jpeg 打时间戳 ffmpeg -i perf_60Hz_Raw.mp4 -vf "drawtextfontsize160:fontcolorred:text%{pts\:hms}" -c:v libx264 -an -f mp4 perf_output.mp4 -y ffmpeg -i perf_8k.mp4 -v…...

代码随想录训练营第五十七天|647. 回文子串、516.最长回文子序列

647. 回文子串 题目链接/文章讲解/视频讲解&#xff1a;代码随想录 1.代码展示 //647.回文子串 int countSubstrings(string s) {//step1 构建dp数组&#xff0c;明确dp数组的含义&#xff0c;dp[i][j]的含义是在下标为i和j区间内的字串是否为回文串vector<vector<bool&…...

对线程池设置做压测

线程池代码 Configuration public class ThreadPoolConfig {// 核心线程池大小private int corePoolSize 24;// 最大可创建的线程数private int maxPoolSize 25;// 队列最大长度private int queueCapacity 100;// 线程池维护线程所允许的空闲时间private int keepAliveSeco…...

【网络通信 -- WebRTC】项目实战记录 -- mediasoup android 适配 webrtc m94

【网络通信 -- WebRTC】项目实战记录 -- mediasoup android 适配 webrtc m94 【1】下载并配置 depot_tools 下载 depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git编辑 ~/.bashrc 将 depot_tools 添加到路径中 vim ~/.bashrc export…...

【力扣周赛】第 357 场周赛(⭐反悔贪心)

文章目录 竞赛链接Q1&#xff1a;6925. 故障键盘解法1——直接模拟解法2——双端队列 Q2&#xff1a;6953. 判断是否能拆分数组&#xff08;贪心&#xff09;Q3&#xff1a;2812. 找出最安全路径⭐解法1——多源BFS瓶颈路模型&#xff1f;解法2——多源BFS 倒序枚举答案 并查…...

css重置

css 重置 CSS 重置的主要目标是确保浏览器之间的一致性&#xff0c;并撤消所有默认样式&#xff0c;创建一个空白板。 如今&#xff0c;主流浏览器都实现了css规范&#xff0c;在布局或间距方面没有太大差异。但是通过自定义 CSS 重置&#xff0c;也可以改善用户体验和提高开…...

tcpdump相关

Linux内核角度分析tcpdump原理&#xff08;一&#xff09;Linux内核角度分析tcpdump原理&#xff08;二&#xff09;...

MFC新建内部消息

提示&#xff1a;记录一下MFC新建内部消息的成功过程 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 先说一下基本情况&#xff0c;因为要在mapview上增加一个显示加载时间的功能。然后发现是要等加载完再显示时间&#xff0c;显示在主…...

linux查找目录

要在Linux中查找目录&#xff0c;可以使用find命令。下面是查询目录的几个示例&#xff1a; 1,查找当前目录下所有子目录&#xff1a; find . -type d 2,在指定路径下查找目录&#xff1a; find /path/to/directory -type d 3,查找以特定名称开头的目录&#xff1a; find . -t…...

机器学习:可解释学习

文章目录 可解释学习为什么需要可解释机器学习可解释还是强模型可解释学习的目标可解释机器学习Local ExplanationGlobal Explanation 可解释学习 神马汉斯&#xff0c;只有在有人看的时候能够答对。 为什么需要可解释机器学习 贷款&#xff0c;医疗需要给出理由&#xff0c;让…...

UE5- c++ websocket里实现调用player里的方法

# UGameInstance里直接调用 获取到引用了&#xff0c;就可以自然的调用。忽略 # UGameInstance里间接调用&#xff0c;通过代理调用 前置已经添加了websocket,具体步骤参考&#xff0c;链接在UWebSocketGameInstance.h里新增代理&#xff0c;并在链接成功后进行绑定。 #pragma…...

线性代数的学习和整理18:什么是维度,什么是秩?秩的各种定理秩的计算 (计算部分未完成)

目录 0 问题引出&#xff1a;什么是秩&#xff1f; 概念备注&#xff1a; 1 先厘清&#xff1a;什么是维数&#xff1f; 1.1 真实世界的维度数 1.2 向量空间的维数 1.2.1 向量空间&#xff0c;就是一组最大线性无关的向量组/基张成的空间 1.3 向量α的维数 1.3.1 向量的…...

Centos 6.5 升级到Centos7指导手册

一、背景 某业务系统因建设较早&#xff0c;使用的OS比较过时&#xff0c;还是centos6.5的系统&#xff0c;因国产化需要&#xff0c;需将该系统升级到BClinux 8.6&#xff0c;但官方显示不支持centos 6.x升级到8&#xff0c;需先将centos6.5升级到centos7的最新版&#xff0c…...

详解python中的映射类型---字典

概述 映射类型是“键-值”数据项的组合&#xff0c;每个元素是一个键值对&#xff0c;即元素是&#xff08;key&#xff0c;value&#xff09;&#xff0c;元素之间是无序的。键值对&#xff08;key&#xff0c;value&#xff09;是一种二元关系&#xff0c;源于属性和值的映射…...

GDB 符号检视三件套:`ptype` / `info variables` / `info functions`

调试 NuttX/Vela 这类嵌入式系统时&#xff0c;光会 bt 和 print 远远不够。真正能让你在陌生代码里快速定位、看清结构、批量布点的&#xff0c;是 GDB 的符号检视命令。本文整理三件最常用的&#xff1a; ptype —— 看类型长什么样info variables —— 找全局/静态变量在哪…...

基于大语言模型的抖音智能评论机器人:从原理到部署实践

1. 项目概述&#xff1a;当抖音遇上AI&#xff0c;一个自动回复机器人的诞生最近在刷抖音的时候&#xff0c;我经常看到一些账号的评论区里&#xff0c;作者回复得特别快&#xff0c;而且内容还挺有意思&#xff0c;有时候甚至能接上一些很刁钻的梗。一开始我还以为是真人24小时…...

【数字孪生实战案例】三维场景中怎样点击飞线,唤起弹窗并加载匹配的关联数据?~山海鲸可视化

在三维数据可视化场景中&#xff0c;飞线常用于呈现跨区域业务关联与流转关系。为增强交互体验与数据可读性&#xff0c;需实现点击飞线触发弹窗&#xff0c;并精准加载匹配的关联数据&#xff0c;让用户可实时查看单条飞线对应的业务信息&#xff0c;提升三维场景的数据交互与…...

Crustocean/conch:轻量级容器化工具,简化开发者本地环境搭建

1. 项目概述&#xff1a;一个面向开发者的轻量级容器化工具最近在和一些做后端开发的朋友聊天&#xff0c;发现大家普遍有个痛点&#xff1a;本地开发环境和线上环境不一致&#xff0c;导致“在我机器上好好的”这种经典问题频繁上演。虽然Docker已经普及&#xff0c;但完整的D…...

从WCGW代码事故集看软件开发的常见陷阱与防御性编程实践

1. 项目概述&#xff1a;一个“看热闹不嫌事大”的代码仓库在程序员的世界里&#xff0c;除了正经八百的业务代码和开源框架&#xff0c;总有一些项目&#xff0c;它们诞生的初衷不是为了解决某个严肃的技术难题&#xff0c;而是为了捕捉、记录那些让人哭笑不得、甚至有点“幸灾…...

别再只会显示字符了!用51单片机和OLED做个简易电子时钟(IIC协议详解)

从零构建51单片机OLED电子时钟&#xff1a;IIC协议深度解析与项目实战 在嵌入式开发领域&#xff0c;51单片机因其稳定性和易用性始终占据一席之地。当基础的点亮OLED屏幕、显示静态文字已经无法满足你的求知欲时&#xff0c;一个融合硬件协议、实时时钟和UI设计的电子时钟项目…...

【实战排错】Vivado 综合卡死与“PID not specified”的深度诊断与修复

1. 故障现象与初步排查 最近在跑Vivado综合时&#xff0c;突然遇到一个让人头疼的问题&#xff1a;综合进程莫名其妙卡死&#xff0c;日志里还跳出"PID not specified"的错误提示。这种情况相信不少FPGA工程师都遇到过&#xff0c;特别是项目紧急的时候&#xff0c;这…...

从源码到集群:OpenMPI在Linux环境下的定制化编译与部署实践

1. 为什么需要从源码编译OpenMPI&#xff1f; 很多刚接触高性能计算的朋友可能会有疑问&#xff1a;直接用包管理器安装OpenMPI不是更方便吗&#xff1f;确实&#xff0c;像apt-get install openmpi或yum install openmpi这样的命令一键就能搞定。但实际工作中&#xff0c;我遇…...

NewLife.Core配置系统深度解析:XML/JSON/HTTP多源配置实战

NewLife.Core配置系统深度解析&#xff1a;XML/JSON/HTTP多源配置实战 【免费下载链接】X Core basic components: log (file / network), configuration (XML / JSON / HTTP), cache (memory / redis), network (TCP / UDP / HTTP), RPC framework, serialization (binary / X…...

线程相关知识

线程是进程内的一条独立执行流&#xff0c;是操作系统调度 CPU 的最小单位&#xff0c;共享进程的地址空间与资源&#xff0c;有自己独立的栈、寄存器、程序计数器。一、核心本质拆解1.从属关系 进程是资源分配最小单位&#xff08;内存、文件、句柄&#xff09;&#xff1b; 线…...