【线性代数】理解矩阵乘法的意义(点乘)

刚接触线性代数时,很不理解矩阵乘法的计算规则,为什么规则定义的看起来那么有规律却又莫名其妙,现在参考了一些资料,回过头重新总结下个人对矩阵乘法的理解(严格来说是点乘)。

理解矩阵和矩阵的乘法,可以先理解矩阵和向量的乘法,因为矩阵可以看成是不同列向量的集合。

下面从基变换视角理解矩阵的乘法原理,基变换视角是将矩阵的每个列向量看成是新基坐标系中的一个基坐标。

先考虑一个规则的 2x2 的矩阵和一个 2x1 的向量之间的乘法,例如:
[ 1 − 2 1 2 ] [ 1 1 ] = [ − 1 3 ] \begin{bmatrix} 1&-2 \\ 1&2 \end{bmatrix} \begin{bmatrix} 1\\ 1 \end{bmatrix} = \begin{bmatrix} -1\\ 3 \end{bmatrix} [1122][11]=[13]
后面为了方便描述,分别用A表示矩阵,a表示等号左边的向量(1, 1),b表示等号右边的向量(-1, 3)。

上面这个乘法过程可以理解为:把矩阵A看成一个新的基坐标系,(1, 1) 和 (-2, 2) 分别是新基坐标系中的x, y轴。b(1, 1)可以看成是这个新基坐标系视角下坐标表示的一个向量,左边乘上一个矩阵A,相当于求出在以矩阵A为新的基坐标系的视角下,向量(1, 1)在标准的笛卡尔坐标系中的坐标表示。

可视化上面这个计算:

import numpy as np
import matplotlib.pyplot as plt

# 定义矩阵和向量
A = np.array([[1, -2], [1, 2]])
b = np.array([1, 1])

# 计算变换后的向量
b_transformed = A @ b

# 定义标准基
origin = np.array([[0, 0], [0, 0]])

# 绘制
fig, ax = plt.subplots()

# 绘制原始向量
ax.quiver(*origin, b[0], b[1], angles='xy', scale_units='xy', scale=1, color='blue', label='Original Vector (1,1)')

# 绘制新基
ax.quiver(*origin, A[0, 0], A[1, 0], angles='xy', scale_units='xy', scale=1, color='red', label='New x-axis (1,1)')
ax.quiver(*origin, A[0, 1], A[1, 1], angles='xy', scale_units='xy', scale=1, color='green', label='New y-axis (-2,2)')

# 绘制变换后的向量
ax.quiver(*origin, b_transformed[0], b_transformed[1], angles='xy', scale_units='xy', scale=1, color='purple', label='Transformed Vector (-1,3)')

# 设置图形属性
ax.set_xlim(-3, 3)
ax.set_ylim(0, 3)  # 只显示x轴的上半部分
ax.set_aspect('equal')
plt.grid()

# 调整图例位置
plt.legend(loc='upper left', bbox_to_anchor=(0.6, 1), fontsize='small')
plt.title('Vector Transformation and Basis Visualization')
plt.xlabel('X')
plt.ylabel('Y')

plt.show()

在这里插入图片描述

红色和绿色的向量构成了一个新的坐标基底,从这个基底的视角来看,棕色的向量还是(1, 1),但是这个新基坐标系下的向量(1, 1)在原笛卡尔坐标系下的表示是(-1, 3)。

所以基变换角度来看矩阵乘向量 A ⋅ b A \cdot b Ab,可以理解成以矩阵A为新的基底,该基底下的向量b,在笛卡尔坐标系下的真实位置。

由此理解矩阵乘法的计算规则,为什么就是像下面这样,前面一个矩阵的第 i 行 x 后一个矩阵的第 j 列,结果为新的矩阵的第 ij 个元素:
[ 1 − 2 1 2 ] [ 1 1 ] = [ − 1 × 1 + ( − 2 ) × 1 1 × 1 + 2 × 1 ] = [ − 1 3 ] \begin{bmatrix} 1&-2 \\ 1&2 \end{bmatrix} \begin{bmatrix} 1\\ 1 \end{bmatrix} = \begin{bmatrix} -1\times1+(-2)\times1\\ 1\times1+2\times1 \end{bmatrix}= \begin{bmatrix} -1\\ 3 \end{bmatrix} [1122][11]=[1×1+(2)×11×1+2×1]=[13]
因为左边矩阵不同的列向量代表新基坐标系中不同维度下的基底,后面矩阵列向量中的不同坐标分别表示新的基坐标系中不同维度的坐标,而新的基坐标系中,不同维度的基坐标轴的坐标表示,又可以看成是相对于原笛卡尔坐标系的投影,比如新的x轴(1, 1),表示这个轴在笛卡尔坐标系中的x, y轴上的投影分别都是1,新的x轴中的一个单位长度,等价于原笛卡尔坐标系中x, y轴各自一个单位长度。

因此矩阵乘法之所以规定行乘列的值作为计算的结果,本质上是把新基坐标系下,一个向量所有维度的坐标,在原笛卡尔坐标系下按照不同维度(前面矩阵的行)进行了一个汇总求和。

所以也能理解为什么规定矩阵乘法,要求必须前面一个矩阵的列数等于后一个矩阵的行数,因为前面矩阵的列数其实就是新的基坐标系的维度,后面矩阵的行数,其实就是一个向量在这个新基坐标系中各维度下的坐标表示,二者维度不同,也就没有汇总的必要和意义。

推广到高维的不规则的矩阵,比如一个3x2的矩阵乘上一个2x1的向量,新的基坐标系还是只有两个维度,只不过每个维度会投影到一个三维的笛卡尔坐标系(因为矩阵的列向量是用3个数表示,说明在笛卡尔坐标系中有3个维度的投影)。后面这个2x1的向量可以看成是新的基坐标系下的向量表示,最终的计算还是将这个向量分别在笛卡尔坐标系的三个维度上汇总求和。

以下面这个为例:

[ 0 1 1 0 1 1 ] ⋅ [ 1 1 ] = [ 1 1 2 ] \begin{bmatrix} 0 & 1\\ 1 & 0\\ 1 & 1 \end{bmatrix} \cdot \begin{bmatrix} 1\\ 1 \end{bmatrix}= \begin{bmatrix} 1\\ 1\\ 2 \end{bmatrix} 011101 [11]= 112

在这里插入图片描述
至于推广到更多行或列的矩阵乘法,无非增加行数是增加了新的基坐标在标准笛卡尔坐标系下的分解维度,增加列数是增加了新坐标系的基底数量,原理都还是一样的。

至于矩阵乘矩阵,可以把后一个矩阵看成是多个列向量的集合,用矩阵乘向量的视角去理解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Win11安装安卓子系统WSA

文章目录 简介一、启用Hyper-V二、安装WSA三、安装APKAPK商店参考文献 简介 WSA:Windows Subsystem For Android 一、启用Hyper-V 控制面板 → 程序和功能 → 启用或关闭 Windows 功能 → 勾选 Hyper-V 二、安装WSA 进入 Microsoft Store,下拉框改为 …

Tree-of-Counterfactual Prompting for Zero-Shot Stance Detection

论文地址:Tree-of-Counterfactual Prompting for Zero-Shot Stance Detection - ACL Anthologyhttps://aclanthology.org/2024.acl-long.49/ 1. 概述 立场检测被定义为对文本中立场态度的自动推断。根据 Biber 和 Finegan (1988) 的定义,立场包含两个主…

轻松上手:使用 Vercel 部署 HTML 页面教程

😀 在学习前端的过程中,部署项目往往是一个令人头疼的问题。然而,Vercel 为我们提供了一个便捷且免费的解决方案。 Vercel 是一个强大的云平台,专门用于前端项目的部署和托管。它不仅支持多种前端框架和静态网站生成器&#xff0…

QT从入门到精通(二) ——信号与槽机制

Qt 的信号与槽机制(Signal and Slot)是 Qt 框架 中用于对象间通信的核心机制之一。它允许对象之间进行松耦合的事件驱动式通信,尤其适合 GUI 应用程序 中的事件处理。 1. 基本概念 信号 (Signal) 当对象的状态发生变化时,它会发…

数据结构:Win32 API详解

目录 一.Win32 API的介绍 二.控制台程序(Console)与COORD 1..控制台程序(Console): 2.控制台窗口坐标COORD: 3.GetStdHandle函数: (1)语法: (2)参数: 4.GetConsoleCursorInf…

kubeadm_k8s_v1.31高可用部署教程

kubeadm_k8s_v1.31高可用部署教程 实验环境部署拓扑图**部署署架构****Load Balance****Control plane node****Worker node****资源分配(8台虚拟机)**集群列表 前置准备关闭swap开启ipv4转发更多设置 1、Verify the MAC address and product_uuid are u…

鸿蒙元服务项目实战:备忘录UI页面开发

前言 之前写过一篇关于元服务项目的上架流程,为了更好的了解及开发元服务,准备从0到1简单开发一个小项目,也希望能够帮助到刚刚介入到鸿蒙开发的同学,具体项目呢,也是十分的简单,就是一个小巧的备忘录项目&…

Linux-ubuntu点LED灯C语言版

​ 一,C语言点灯 1.寄存器配置 设置为SVC模式,复用寄存器设置GPIO1-IO003,设置电气属性,设置为输出模式。 2.软件 汇编语言对模式设置,并且将堆栈指针指向主程序: .global _start_start: /*设置为svr模式 */mrs …

SLM510A系列——24V,15到150mA单通道可调电流线性恒流LED驱动芯片

SLM510A 系列产品是单通道、高精度、可调电流线性恒流源的 LED 驱动芯片,在各种 LED 照明产品中非常简单易用。其在宽电压输入范围内,能保证极高的输出电流精度,从而在大面积的光源照明中,都能让 LED 照明亮度保持均匀一致。 由于…

【JavaEE】网络(2)

一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机,通过不同的进程,以编程的方式实现网络通信;当然,我们只要满足进程不同就行,所以即便是同一个主机,只要是不同进程,基于网络来传…

【Java数据类型学习——String】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 打印字符串长度的两种方法字符串String的比较1.用于比较引用的对象是否指向同一个内存地址2.用equa…

基于Spring Boot的校园部门资料管理系统

一、系统背景与目的 随着信息技术的飞速发展,校园信息化建设成为必然趋势。学校各部门在日常工作中积累了大量的资料,包括教学资料、学生档案、科研成果、行政文件等。传统的纸质资料管理方式存在效率低、易丢失、难以检索等问题,无法满足现…

STL 剖析

STL 六大组件 「STL 六大组件的交互关系」 Container 通过 Allocator 取得数据储存空间Algorithm 通过 Iterator 存取 Container 内容Functor 可以协助 Algorithm 完成不同的策略变化Adapter 可以修饰或套接 Functor、Iterator 配置器(allocator) 配置器:负责空间…

企业网络构建:如何满足业务需求与提升效率

企业组网指通过网络将企业内部的各种设备(如电脑、打印机和服务器等)连接起来,实现资源共享、信息交流与协同办公的过程。要打造一个高效的企业网络,需要从安全性、可靠性、稳定性和性能等多个方面进行综合考虑。以下内容将详细解…

升级thinkphp8最新版本,升级后发现版本不变

升级thinkphp8.0.3最新版本8.1.1,升级后发现版本不变, 更新TP有两个方法 1 全部更新(所有插件都一起更新) composer update 2 只更新TP框架核心 composer update topthink/framework 造成可能有两个原因,一是缓存问题,二是更新…

Cesium进阶教程——自定义图形、外观、绘图基础、现有着色器移植至Cesium、ShadowMapping、视频GIS、模型压平、卷帘

基础必看 WEBGL基础(从渲染管线角度解读) 参考路线 http://www.xt3d.online/tutorial/further/article.html 自定义图形 https://blog.csdn.net/m0_55049655/article/details/138908327 https://blog.csdn.net/m0_55049655/article/details/140306837 …

理解数据结构 hashtable的简易理解思路

结构图 为了方便演示,下图中分区算法为下标取模 private int hashFun(int id) {//使用 hash并取模return id % size;}Hashtable的结构如图所示:是一个数组(元素为各个链表的表头) 多个链表组成,也就是说 hashtable 结…

【YashanDB知识库】kettle同步PG至崖山提示no encryption pg_hba.conf记录

【问题分类】数据导入导出 【关键字】数据同步,kettle,数据迁移,pg_hba.conf 【问题描述】使用kettle同步postgresql至崖山数据库时提示以下报错信息: 【问题原因分析】pg_hba.conf 文件中没有正确配置允许从 IP 地址 连接到数…

记录2024-leetcode-字符串DP

10. 正则表达式匹配 - 力扣(LeetCode)

UE5制作伤害浮动数字

效果演示: 首先创建一个控件UI 添加画布和文本 文本设置样式 添加伤害浮动动画,根据自己喜好调整,我设置了缩放和不透明度 添加绑定 转到事件图表,事件构造设置动画 创建actor蓝图类 添加widget 获取位置 设置位移 创建一个被击中…