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

学习笔记(25):线性代数,矩阵-矩阵乘法原理

学习笔记(25):线性代数,矩阵-矩阵乘法原理

1、代码

import torch
A = torch.arange(20).reshape(5, 4)
print(A)
A = A.to(torch.float32)  # 或使用A.float()B = torch.ones(4, 3)
print(B)
print(torch.mm(A, B))

2、执行结果

tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]])
tensor([[ 6.,  6.,  6.],
        [22., 22., 22.],
        [38., 38., 38.],
        [54., 54., 54.],
        [70., 70., 70.]])

计算原理解释:

要计算 torch.mm(A, B)(矩阵乘法),需要确保 A 的列数等于 B 的行数。在你的例子中:

  • A 是一个 5×4 的矩阵(5 行 4 列)。
  • B 是一个 4×3 的矩阵(4 行 3 列)。

由于 A 的列数(4)等于 B 的行数(4),因此可以进行矩阵乘法,结果将是一个 5×3 的矩阵。

矩阵乘法原理

矩阵乘法 C = A × B 的计算规则是:

  • C 的行数等于 A 的行数(5 行)。
  • C 的列数等于 B 的列数(3 列)。
  • C 中每个元素 C[i,j] 等于 A 的第 i 行与 B 的第 j 列对应元素的乘积之和

计算步骤示例

以结果矩阵 C 的第一行第一列元素 C[0,0] 为例:

  1. 取 A 的第 0 行[0, 1, 2, 3]
  2. 取 B 的第 0 列[1., 1., 1., 1.]
  3. 对应元素相乘后求和:\((0 \times 1) + (1 \times 1) + (2 \times 1) + (3 \times 1) = 0 + 1 + 2 + 3 = 6\)

同理,计算其他元素:

  • C[0,1] = (0×1) + (1×1) + (2×1) + (3×1) = 6
  • C[0,2] = (0×1) + (1×1) + (2×1) + (3×1) = 6
  • 以此类推,最终得到整个矩阵 C

A=tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])
B=tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]])

结果:

tensor([[ 6.,  6.,  6.],
        [22., 22., 22.],
        [38., 38., 38.],
        [54., 54., 54.],
        [70., 70., 70.]])

验证方法

由于 B 的所有元素都是 1,因此结果矩阵 C 的每个元素 C[i,j] 实际上等于 A 的第 i 行的所有元素之和。例如:

  • A 的第 0 行和为 0+1+2+3=6,对应 C [0,:] 的所有元素。
  • A 的第 1 行和为 4+5+6+7=22,对应 C [1,:] 的所有元素。
  • 以此类推。

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

相关文章:

  • 【Android】Android Studio项目代码异常错乱问题处理(2020.3版本)
  • AOSP (Android11) 集成Google GMS三件套
  • 服务器信任质询
  • Ubuntu Cursor升级成v1.0
  • 黑龙江云前沿服务器租用:便捷高效的灵活之选​
  • Linux容器篇、第二章_01Ubuntu22 环境下 KubeSphere 容器平台高可用搭建全流程
  • 矩阵和向量范数的区别分析
  • 【案例分享】如何借助JS UI组件库DHTMLX Suite构建高效物联网IIoT平台
  • Opencv中的copyto函数
  • Keil调试模式下,排查程序崩溃简述
  • 【行驶证识别成表格】批量OCR行驶证识别与Excel自动化处理系统,行驶证扫描件和照片图片识别后保存为Excel表格,基于QT和华为ocr识别的实现教程
  • MCP(Model Context Protocol)AI大模型的超级外挂
  • 安装pytorch、cuda11.8
  • 攻击模型的恶意行为检测
  • 全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
  • 【Spark征服之路-2.3-Spark运行架构】
  • 基于AWS Serverless架构:零运维构建自动化SEO内容生成系统
  • Spark 之 DataFrame 开发
  • 应用分享 | 精准生成和时序控制!AWG在确定性三量子比特纠缠光子源中的应用
  • 在SpringBoot中使用AWS SDK实现邮箱验证码服务
  • 机器学习与深度学习14-集成学习
  • PostgreSQL17 编译安装+相关问题解决
  • 从微积分到集合论(1630-1910)(历史简介)——第4章——现代积分理论的起源(Thomas Hawkins)
  • 从0到1写一个适用于Node.js的User Agent生成库
  • Visual Studio 中的 MD、MTD、MDD、MT 选项详解
  • python学习打卡day46
  • 网络安全逆向分析之rust逆向技巧
  • 三模冗余设计
  • 护网行动面试试题(2)
  • 分布式微服务系统架构第144集:FastAPI全栈开发教育系统