李沐动手深度学习(pycharm中运行笔记)——05.线性代数

05.线性代数(与课程对应)

1、导入torch

import torch

2、 标量由只有一个元素的张量表示

x = torch.tensor([3.0])
y = torch.tensor([2.0])
print("x + y:", x + y, "\nx * y:", x * y, "\nx / y:", x / y, "\nx ** y:", x ** y)

运行结果:

3、向量:可以视为标量值组成的列表

a = torch.arange(4)  # (1)创建一个向量
print("a:", a)
print("a[3]:", a[3])  # (2)通过张量的索引来访问任一元素
print("len(a):", len(a))  # (3)访问张量的长度
print("a.shape:", a.shape)  # (4)只有一个轴的张量,形状只有一个元素

运行结果:

4、矩阵

A = torch.arange(20).reshape(5, 4)  # (1)通过指定两个分量m和n来创建一个形状为mxn的矩阵
print("A:", A)
print("A.T:", A.T)  # (2)矩阵的转置

运行结果:

5、对称矩阵:A = A.T

B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
print("B:", B)
print("B == B.T:", B == B.T)  # 所有元素都为True

运行结果:

6、给定具有相同形状的任何两个张量,任何元素二元运算的结果都将是相同形状的张量

C = torch.arange(20, dtype=torch.float32).reshape(5, 4)
D = C.clone()  # 通过分配新内存,将C的一个副本分配给D,这样B与A就没有关系了
print("C:", C, "\nC + D:", C + D)

运行结果: 

7、两个矩阵的按元素乘法称为 哈达玛积

print("C * D:", C * D)

运行结果:

8、张量与标量之间的运算,乘法为例

e = 2
F = torch.arange(24).reshape(2, 3, 4)
print("e + F:", e + F, "\n(e * F).shape:", (e * F).shape)

 运行结果:

9、计算其元素的和

k = torch.arange(4, dtype=torch.float32)
print("k:", k, "\nk.sum():", k.sum())

运行结果:

10、表示任意形状张量的元素和

H = torch.arange(20*2).reshape(2, 5, 4)
print("H:", H, "\nH.shape:", H.shape, "\nH.sum():", H.sum())

运行结果:

11、指定求和汇总张量的轴;按哪个轴求和,这个轴的维数就会消失(对哪一维求和就是消除哪一维)

H_sum_axis0 = H.sum(axis=0)  # (1)对第1个维度进行了求和,两外两个维度留下来了
print("H_sum_axis0:", H_sum_axis0, "\nH_sum_axis0.shape:", H_sum_axis0.shape)
H_sum_axis1 = H.sum(axis=1)  # (2)对第2个维度进行了求和,两外两个维度留下来了
print("H_sum_axis1:", H_sum_axis1, "\nH_sum_axis1.shape:", H_sum_axis1.shape)
H_sum_axis2 = H.sum(axis=2)  # (3)对第3个维度进行了求和,两外两个维度留下来了
print("H_sum_axis2:", H_sum_axis2, "\nH_sum_axis2.shape:", H_sum_axis2.shape)

运行结果:

12、一个与求和相关的量 平均值(mean 或 average)

M = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print("M.mean():", M.mean(), "\nM.sum() / M.numel():", M.sum() / M.numel())  # (1)整体求均值
print("M.mean(axis=0):", M.mean(axis=0), "\nM.sum(axis=0) / M.shape[0]:", M.sum(axis=0) / M.shape[0])  # (2)按轴求均值

运行结果:

13、计算总和或均值时保持轴数不变

sum_M = A.sum(axis=1, keepdims=True)
print("M:", M, "\nsum_M:", sum_M)

运行结果:

14、通过广播将 M 除以 sum_M

print(M / sum_M)

运行结果:

15、某个轴计算 M 元素的累积总和

print("M.cumsum(axis=0):", M.cumsum(axis=0))  # 每行累加做和

运行结果:

16、点积是相同位置的按元素乘积的和

u = torch.arange(4, dtype=torch.float32)
v = torch.ones(4, dtype=torch.float32)
print("u:", u, "\nv:", v, "\ntorch.dot(u, v):", torch.dot(u, v))

运行结果:

17、可以通过执行按元素乘法,然后进行求和来表示两个向量的点积

print("torch.sum(u * v):", torch.sum(u * v))

运行结果:

18、矩阵向量积 Ax 是一个长度为m的列向量,其每个元素是点积

print("M.shape:", M.shape, "\nx.shape:", u.shape, "\ntorch.mv(M, u):", torch.mv(M, u))

运行结果:

19、矩阵与矩阵乘法 MN可以看作是简单地执行m次矩阵向量积,并将结果拼接在一起,形成一个nxm矩阵

N = torch.ones(4, 3)
print("torch.mm(M, N):", torch.mm(M, N))

运行结果:

20、范数:L1、L2范数用于向量;F范数用于矩阵

w = torch.tensor([3.0, -4.0])
print("torch.norm(w):", torch.norm(w))  # (1)L2范数:norm()所有元素平方求和再开根号;向量元素平方和的平方根
print("torch.abs(w).sum():", torch.abs(w).sum())  # L1范数:所有元素的绝对值求和;向量元素的绝对值之和
print("torch.norm(torch.ones((4, 9))):", torch.norm(torch.ones((4, 9))))  # F范数,矩阵的 佛罗贝尼乌斯范数(Frobenius norm)是矩阵元素的平方和的平方根;直接通过norm()就可以得到F范数

运行结果:

21、完整代码:

import torch# 1、标量由只有一个元素的张量表示
x = torch.tensor([3.0])
y = torch.tensor([2.0])
print("x + y:", x + y, "\nx * y:", x * y, "\nx / y:", x / y, "\nx ** y:", x ** y)# 2、向量:可以视为标量值组成的列表
a = torch.arange(4)  # (1)创建一个向量
print("a:", a)
print("a[3]:", a[3])  # (2)通过张量的索引来访问任一元素
print("len(a):", len(a))  # (3)访问张量的长度
print("a.shape:", a.shape)  # (4)只有一个轴的张量,形状只有一个元素# 3、矩阵
A = torch.arange(20).reshape(5, 4)  # (1)通过指定两个分量m和n来创建一个形状为mxn的矩阵
print("A:", A)
print("A.T:", A.T)  # (2)矩阵的转置# 4、对称矩阵:A = A.T
B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
print("B:", B)
print("B == B.T:", B == B.T)  # 所有元素都为True# 5、就像向量是标量的推广,矩阵是向量的推广,我们可以构建具有更多轴的数据结构
X = torch.arange(24).reshape(2, 3, 4)
print("X:", X)# 6、给定具有相同形状的任何两个张量,任何元素二元运算的结果都将是相同形状的张量
C = torch.arange(20, dtype=torch.float32).reshape(5, 4)
D = C.clone()  # 通过分配新内存,将C的一个副本分配给D,这样B与A就没有关系了
print("C:", C, "\nC + D:", C + D)# 7、两个矩阵的按元素乘法称为 哈达玛积
print("C * D:", C * D)# 8、张量与标量之间的运算,乘法为例
e = 2
F = torch.arange(24).reshape(2, 3, 4)
print("e + F:", e + F, "\n(e * F).shape:", (e * F).shape)# 9、计算其元素的和
k = torch.arange(4, dtype=torch.float32)
print("k:", k, "\nk.sum():", k.sum())# 10、表示任意形状张量的元素和
H = torch.arange(20*2).reshape(2, 5, 4)
print("H:", H, "\nH.shape:", H.shape, "\nH.sum():", H.sum())# 11、指定求和汇总张量的轴;按哪个轴求和,这个轴的维数就会消失(对哪一维求和就是消除哪一维)
H_sum_axis0 = H.sum(axis=0)  # (1)对第1个维度进行了求和,两外两个维度留下来了
print("H_sum_axis0:", H_sum_axis0, "\nH_sum_axis0.shape:", H_sum_axis0.shape)
H_sum_axis1 = H.sum(axis=1)  # (2)对第2个维度进行了求和,两外两个维度留下来了
print("H_sum_axis1:", H_sum_axis1, "\nH_sum_axis1.shape:", H_sum_axis1.shape)
H_sum_axis2 = H.sum(axis=2)  # (3)对第3个维度进行了求和,两外两个维度留下来了
print("H_sum_axis2:", H_sum_axis2, "\nH_sum_axis2.shape:", H_sum_axis2.shape)# 12、一个与求和相关的量 平均值(mean 或 average)
M = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print("M.mean():", M.mean(), "\nM.sum() / M.numel():", M.sum() / M.numel())  # (1)整体求均值
print("M.mean(axis=0):", M.mean(axis=0), "\nM.sum(axis=0) / M.shape[0]:", M.sum(axis=0) / M.shape[0])  # (2)按轴求均值# 13、计算总和或均值时保持轴数不变
sum_M = A.sum(axis=1, keepdims=True)
print("M:", M, "\nsum_M:", sum_M)# 14、通过广播将 M 除以 sum_M
print("M / sum_M:", M / sum_M)# 15、某个轴计算 M 元素的累积总和
print("M.cumsum(axis=0):", M.cumsum(axis=0))  # 每行累加做和# 16、点积是相同位置的按元素乘积的和
u = torch.arange(4, dtype=torch.float32)
v = torch.ones(4, dtype=torch.float32)
print("u:", u, "\nv:", v, "\ntorch.dot(u, v):", torch.dot(u, v))# 17、可以通过执行按元素乘法,然后进行求和来表示两个向量的点积
print("torch.sum(u * v):", torch.sum(u * v))# 18、矩阵向量积 Ax 是一个长度为m的列向量,其每个元素是点积
print("M.shape:", M.shape, "\nx.shape:", u.shape, "\ntorch.mv(M, u):", torch.mv(M, u))# 19、矩阵与矩阵乘法 MN可以看作是简单地执行m次矩阵向量积,并将结果拼接在一起,形成一个nxm矩阵
N = torch.ones(4, 3)
print("torch.mm(M, N):", torch.mm(M, N))# 20、范数:L1、L2范数用于向量;F范数用于矩阵
w = torch.tensor([3.0, -4.0])
print("torch.norm(w):", torch.norm(w))  # (1)L2范数:norm()所有元素平方求和再开根号;向量元素平方和的平方根
print("torch.abs(w).sum():", torch.abs(w).sum())  # L1范数:所有元素的绝对值求和;向量元素的绝对值之和
print("torch.norm(torch.ones((4, 9))):", torch.norm(torch.ones((4, 9))))  # F范数,矩阵的 佛罗贝尼乌斯范数(Frobenius norm)是矩阵元素的平方和的平方根;直接通过norm()就可以得到F范数

 如果此文章对您有所帮助,那就请点个赞吧,收藏+关注 那就更棒啦,十分感谢!!! 

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

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

相关文章

Python3与Dubbo3.1通讯解决方案(dubbo-python)

【文章非VIP可读,如果发现阅读限制为系统自动修改阅读权限,请留言我改回】 概述 最近AI项目需要java与python通讯,两边都是比较新的版本。因此需要双方进行通讯,在这里记录一下所采用的方案和关键点。 JAVA调用Python python通…

使用 DBeaver 将数据从 PostgreSQL 导出到 SQLite

使用 DBeaver 将数据从 PostgreSQL 导出到 SQLite,可按以下步骤进行: 1、连接到 PostgreSQL 数据库:打开 DBeaver,点击 “新建连接”,选择 “PostgreSQL”,输入数据库的地址、端口、用户名和密码等信息&am…

介词:连接名词与句子其他成分的桥梁

文章目录 1. with伴随1.表示“跟人或物”的伴随2.“行为”和“状态”的伴随2. of所属关系1. 人或物的所属关系2. 比较抽象的所属关系3. in1. 在......中,在......范围里2. 在某一段时间4. on1. 表示地点:在......上2. 表示时间:在某一天3. 关于某个主题5. at1. at + 具体时间…

FastApi快速实践

文章目录 一、主要功能:二、安装 FastAPI 和 Uvicorn(运行服务器)三、示例代码:四、运行服务器:1. 方式一:2. 方式二: 五、访问接口六、如果需要跨域(CORS)七、总结 下面…

深度学习中保存最优模型的实践与探索:以食物图像分类为例

深度学习中保存最优模型的实践与探索:以食物图像分类为例 在深度学习的模型训练过程中,训练一个性能良好的模型往往需要耗费大量的时间和计算资源。而保存最优模型不仅可以避免重复训练,还能方便后续使用和部署。本文将结合食物图像分类的代…

护理岗位技能比赛主持稿串词

男:尊敬的各位老师 女:亲爱的各位同学 合:大家下午好。 男:在这鸟语花香,诗意盎然的季节里 女:在这阳光灿烂,激情似火的日子里 合:我们欢聚一堂,共同庆祝五一二国际护士节…

【翻译、转载】MCP 核心架构

核心架构 了解 MCP 如何连接客户端、服务器和 LLM 模型上下文协议 (MCP) 构建在一个灵活、可扩展的架构之上,能够实现 LLM 应用程序与集成之间的无缝通信。本文档涵盖了核心的架构组件和概念。 概述 MCP 遵循客户端-服务器 (client-server) 架构,其中…

Python 数据智能实战 (11):LLM如何解决模型可解释性

写在前面 —— 不只知其然,更要知其所以然:借助 LLM,揭开复杂模型决策的神秘面纱 在前面的篇章中,我们学习了如何利用 LLM 赋能用户分群、购物篮分析、流失预测以及个性化内容生成。我们看到了 LLM 在理解数据、生成特征、提升模型效果和自动化内容方面的巨大潜力。 然而…

Linux:进程优先级及环境

一:孤儿进程 在Linux系统中,当一个进程创建了子进程后,如果父进程执行完毕或者提前退出而子进程还在运行,那么子进程就会成为孤儿进程。子进程就会被systemd(系统)进程收养,其pid为1 myproces…

Java大厂面试:Java技术栈中的核心知识点

Java技术栈中的核心知识点 第一轮提问:基础概念与原理 技术总监:郑薪苦,你对JVM内存模型了解多少?能简单说说吗?郑薪苦:嗯……我记得JVM有堆、栈、方法区这些区域,堆是存放对象的地方&#xf…

CF1000E We Need More Bosses

CF1000E We Need More Bosses 题目描述 题目大意: 给定一个 n n n 个点 m m m 条边的无向图,保证图连通。找到两个点 s , t s,t s,t,使得 s s s到 t t t必须经过的边最多(一条边无论走哪条路线都经过ta,这条边就是…

imx6uLL应用-v4l2

Linux V4L2 视频采集 JPEG 解码 LCD 显示实践 本文记录一个完整的嵌入式视频处理项目:使用 V4L2 接口从摄像头采集 MJPEG 图像,使用 libjpeg 解码为 RGB 格式,并通过 framebuffer 显示在 LCD 屏幕上。适用于使用 ARM Cortex-A 系列开发板进…

强化学习机器人模拟器——QAgent:一个支持多种强化学习算法的 Python 实现

QAgent 是一个灵活的 Python 类,专为实现经典的强化学习(Reinforcement Learning, RL)算法而设计,支持 Q-learning、SARSA 和 SARSA(λ) 三种算法。本篇博客将基于提供的 q_agent.py 代码,详细介绍 QAgent 类的功能、结构和使用方法,帮助您理解其在强化学习任务中的应用,…

Feign的原理

为什么 SpringCloud 中的Feign,可以帮助我们像使用本地接口一样调用远程 HTTP服务? Feign底层是如何实现的?这篇文章,我们一起来聊一聊。 1. Feign 的基本原理 Feign 的核心思想是通过接口和注解定义 HTTP 请求,将接…

探索正态分布:交互式实验带你体验统计之美

探索正态分布:交互式实验带你体验统计之美 正态分布,这条优美的钟形曲线,可以说是统计学中最重要、最无处不在的概率分布。从自然现象(如身高、测量误差)到金融市场,再到机器学习,它的身影随处…

使用 IDEA + Maven 搭建传统 Spring MVC 项目的详细步骤(非Spring Boot)

搭建Spring MVC项目 第一步:创建Maven项目第二步:配置pom.xml第三步:配置web.xml第四步:创建Spring配置文件第五步:创建控制器第六步:创建JSP视图第七步:配置Tomcat并运行目录结构常见问题解决与…

AI日报 · 2025年5月04日|Hugging Face 启动 MCP 全球创新挑战赛

1、Hugging Face 启动 MCP 全球创新挑战赛 Hugging Face 于 5 月 3 日发布 MCP Global Innovation Challenge,面向全球开发者征集基于模型上下文协议(MCP)的创新工具与应用,赛事持续至 5 月 31 日,设立多档…

学习spring boot-拦截器Interceptor,过滤器Filter

目录 拦截器Interceptor 过滤器Filter 关于过滤器的前置知识可以参考: 过滤器在springboot项目的应用 一,使用WebfilterServletComponentScan 注解 1 创建过滤器类实现Filter接口 2 在启动类中添加 ServletComponentScan 注解 二,创建…

汇编常用语法

GNU汇编语句: [lable:] instruction [comment] lable 表示标号,表示地址位置,可选. instruction即指令,也就是汇编指令或伪指令。 comment 就是注释内容。 用户使用.section 伪操作来定义一个段,汇编系统预定义了一些…

terraform resource创建了5台阿里云ecs,如要使用terraform删除其中一台主机,如何删除?

在 Terraform 中删除阿里云 5 台 ECS 实例中的某一台,具体操作取决于你创建资源时使用的 多实例管理方式(count 或 for_each)。以下是详细解决方案: 方法一:使用 for_each(推荐) 如果创建时使…