PyTorch常用的简单数学运算

一、基础算术运算

1. 逐元素运算

a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])# 加减乘除
a + b  # [5, 7, 9]
a - b  # [-3, -3, -3]
a * b  # [4, 10, 18]
a / b  # [0.25, 0.4, 0.5]# 幂运算、平方根
a ** 2  # [1, 4, 9]
torch.sqrt(a)  # [1.0, 1.414, 1.732]

2. 标量运算

a = torch.tensor([1, 2, 3])a + 2  # [3, 4, 5]
a * 3  # [3, 6, 9]

二、矩阵运算

 1. 矩阵乘法

a = torch.rand(2, 3)  # [2, 3]
b = torch.rand(3, 4)  # [3, 4]# 矩阵乘法
a @ b  # [2, 4],等价于 torch.matmul(a, b)

 2. 批量矩阵乘法

a = torch.rand(10, 2, 3)  # [10, 2, 3]
b = torch.rand(10, 3, 4)  # [10, 3, 4]# 批量矩阵乘法(每个批次独立计算)
torch.bmm(a,b) # [10, 2, 4]

 总结

输入形状

输出形状

torch.bmm(A, B)

[b, m, k][b, k, n]

[b, m, n]

每个批次独立进行矩阵乘法

torch.bmm(A, B)

[b, m, k][1, k, n]

[b, m, n]

广播批次维度后进行矩阵乘法

torch.matmul(A, B)

[m, k][k, n]

[m, n]

标准矩阵乘法

torch.matmul(A, B)

[b, m, k][k, n]

[b, m, n]

广播后进行矩阵乘法

 3. 点积(内积)

a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])torch.dot(a, b)  # 32(1*4 + 2*5 + 3*6)

 三、降维运算

1. 求和、均值、最大值、最小值

a = torch.rand(3, 4)torch.sum(a)          # 标量,所有元素和
torch.sum(a, dim=0)   # [4],按行求和
torch.mean(a, dim=1)  # [3],按列求均值
torch.max(a, dim=0)   # 返回 (values, indices) 元组
torch.min(a, dim=1)   # 返回 (values, indices) 元组

 2. 范数计算

a = torch.tensor([3.0, 4.0])torch.norm(a, p=2)  # 5.0(L2范数)
torch.norm(a, p=1)  # 7.0(L1范数)

    在数学和机器学习中,范数(Norm) 是衡量向量 “大小” 或 “长度” 的一种函数,它为向量空间中的每个向量赋予一个非负实数,表示其 “规模”。范数是欧几里得距离的推广,在深度学习中常用于损失函数设计、正则化、优化算法等场景。

(1)、所有范数都满足以下 3 个基本性质:

  1. 非负性:对于任意向量 x,范数 ∥x∥≥0,且仅当 x 是零向量时,范数为 0。

  2. 齐次性:对于任意标量 α 和向量 x,有 ∥αx∥=∣α∣⋅∥x∥。

  3. 三角不等式:对于任意两个向量 x 和 y,有 ∥x+y∥≤∥x∥+∥y∥。

(2)、常见的向量范数(对应 torch.norm 中的 p 参数) 

在 PyTorch 中,torch.norm(a, p) 计算向量 a 的 p - 范数,其中 p 是范数的阶数。最常用的有以下几种:

① L1 范数(p=1)

  • 定义:向量所有元素的绝对值之和。
    公式:

  • 例子
    对于向量 a=[3.0,4.0],∥a∥1​=∣3.0∣+∣4.0∣=3+4=7.0。

  • 特点:对异常值(离群点)更敏感,会将大的误差放大,但计算简单。

L2 范数(p=2)

  • 定义:向量所有元素的平方和的平方根(即欧几里得距离)。
    公式:

  • 例子
    对于向量 a=[3.0,4.0],

  • 特点:是最常用的范数,对误差的惩罚更平滑,在机器学习中常用于正则化(防止过拟合)。

 四、三角函数与指数对数

x = torch.tensor([0.0, torch.pi/2, torch.pi])torch.sin(x)  # [0.0, 1.0, 0.0]
torch.cos(x)  # [1.0, 0.0, -1.0]
torch.tan(x)  # [0.0, inf, 0.0]y = torch.tensor([1.0, 2.0, 3.0])torch.exp(y)  # [e^1, e^2, e^3]
torch.log(y)  # [ln(1), ln(2), ln(3)]

五、高级运算

 1. 矩阵分解

a = torch.rand(3, 3)# LU分解
P, L, U = torch.lu(a)# SVD分解
U, S, V = torch.svd(a)

 2. 特征值与特征向量

a = torch.rand(3, 3)eigenvalues, eigenvectors = torch.eig(a, eigenvectors=True)

 六、统计运算

1. 协方差矩阵

x = torch.rand(10, 3)  # 10个样本,3个特征# 计算协方差矩阵
cov_matrix = torch.cov(x.t())  # [3, 3]

 2. 直方图

x = torch.rand(100)# 计算直方图
hist = torch.histc(x, bins=10, min=0, max=1)
# input:输入张量(必须是一维张量)。
# bins:直方图的分箱数(即柱子数量),默认为 10。
# min:直方图的最小值范围,小于此值的元素会被忽略。
# max:直方图的最大值范围,大于此值的元素会被忽略。若 max=0,则使用 input 的最大值。

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

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

相关文章

C++ Lambda 表达式详解:从基础到实战

Lambda 表达式是 C11 引入的重要特性,它允许我们在代码中定义匿名函数,极大地简化了代码编写,尤其是在使用 STL 算法和多线程编程时。本文将详细介绍 Lambda 表达式的语法、特性及实际应用场景。什么是 Lambda 表达式?Lambda 表达…

Spring Boot注解详解

文章目录前言1. 核心启动注解SpringBootApplicationEnableAutoConfigurationSpringBootConfiguration2. 组件注解Component及其衍生注解ComponentServiceRepositoryControllerRestController3. 依赖注入注解AutowiredQualifierPrimary4. Web相关注解请求映射注解RequestMapping…

Web开发:ABP框架12——中间件Middleware的创建和使用

一、简介中间件可以用于鉴权、日志,拦截器可以用于指定方法或url的业务逻辑处理,两者分工不同,实现效果相似,先执行中间件,后执行拦截器,再到WebAPI接口。二、示例一个Token验证中间件三、代码1.Startup.cs…

京东商品评论如何获取?API接口实战指南

一、API接入准备1. 注册开发者账号访问京东开放平台:前往京东开放平台注册账号,完成企业或个人实名认证。创建应用:在控制台创建应用,获取App Key和App Secret(用于签名认证)。2. 申请API权限搜索接口&…

leetcode-sql-627变更性别

题目: Salary 表: --------------------- | Column Name | Type | --------------------- | id | int | | name | varchar | | sex | ENUM | | salary | int | --------------------- id 是这个表的主键…

【学习路线】C#企业级开发之路:从基础语法到云原生应用

一、C#基础入门(1-2个月) (一)开发环境搭建Visual Studio安装配置 Visual Studio Community:免费版本,功能完整Visual Studio Code:轻量级,跨平台支持JetBrains Rider:专…

Planning Agent:基于大模型的动态规划与ReAct机制,实现复杂问题自适应执行求解

引言 在当今数据驱动的商业环境中,企业面临着日益复杂的决策问题。传统的数据分析工具往往难以应对多步骤、多依赖的复杂问题求解。例如,当企业需要分析"北美市场 Q1-Q2 主要产品的销售增长趋势并识别关键驱动因素"时,传统工具可能…

人该怎样活着呢?55

人该怎样活着呢? A思考现实问题并记录自己的灵感 。【生活的指南针】 (20250212) a1如何思考? 当有人问他用什么方法得到那么多发现时,牛顿说:“我只不过对于一件事情,总是花很长时间很热…

rtthread - V5.1.0版本 HOOK 钩子函数总结

rtthread - V5.1.0版本 钩子函数 相对于V4.0.3版本做了很大的修改和优化:旧版本 V4.0.3:rt_thread_inited_sethook(thread_inited_hook);rt_thread_deleted_sethook(thread_deleted_hook);rt_scheduler_sethook(scheduler_hook);新版本 V5.1.0&#xff1…

Python特性:装饰器解决数据库长时间断连问题

前言 在基于 Python 的 Web 应用开发里,数据库连接是极为关键的一环。不过,像网络波动、数据库服务器维护这类因素,都可能造成数据库长时间断连,进而影响应用的正常运作。本文将详细介绍怎样运用 retry_on_failure 装饰器来解决数…

疗愈之手的智慧觉醒:Deepoc具身智能如何重塑按摩机器人的触觉神经

疗愈之手的智慧觉醒:Deepoc具身智能如何重塑按摩机器人的触觉神经康复中心的理疗室内,一位运动员正俯卧在治疗床上。机械臂的硅胶触头沿腰背肌群缓缓移动,当传感器捕捉到竖脊肌的异常僵直时,触头自动切换高频震颤模式;…

webpack将组件vue进行编译混淆,并能正常使用编译之后的文件

介绍: 我们在开发的过程中有很多组件都需要复用,特别是我们耗费了好几天时间写出来的组件,比如自己写的表格组件,流程图组件等。总之都是自己不断测试,不断编写耗费了大把的精力写的。直接用到自己的项目中倒是无所谓,如果是把自己写的组件给别人,这里就涉及到自己的劳动…

onenote千年老bug,字体bug (calibri微软雅黑) 的解决

一、如何改这个bug(bug是什么在后文)一、注意1、有些onenote可能是版本问题,即使提供了设置默认字体的选项,但按教程设置后还是不work,建议升级版本2、亲身测过这个方法是可行的,如果不行,考虑下…

麒麟信安参编的三项软件供应链安全团体标准发布

日前,由中国电子商会正式发布了T/CECC 39—2025《信息安全技术 软件供应链管理规范》、T/CECC 40—2025《信息安全技术 软件供应链开源组件检测要求》以及 T/CECC 41—2025《信息安全技术 软件供应链软件产品检测要素和方法》三项重要团体标准。麒麟信安结合自身在软…

Django ORM系统

1. ORM基础概念1.1 什么是ORM?ORM(Object Relational Mapping,对象关系映射)是一种编程技术,用于在面向对象编程语言中实现不同类型系统的数据转换。在Django中,ORM充当业务逻辑层和数据库层之间的桥梁。核…

Tailwind CSS中设定宽度和高度的方法

在 Tailwind CSS 中,设定元素的宽度(width)和高度(height)有多种方式,涵盖固定值、相对值、响应式调整等。以下是完整的方法分类及示例:一、固定宽度 / 高度类以 4px (0.25rem) 为单位递增&…

Java行为型模式---备忘录模式

备忘录模式基础概念备忘录模式(Memento Pattern)是一种行为型设计模式,其核心思想是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便后续可以将该对象恢复到先前保存的状态…

后端参数校验

前端给后端传输数据&#xff0c;有时候参数需要校验&#xff0c;我们自己写代码会比较麻烦&#xff0c;我们可以使用springboot为我们提供的注解&#xff0c;降低这些没有必要的代码开发。1.引入依赖<dependency><groupId>org.springframework.boot</groupId>…

C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(一)

目录 日志打印工具 实用 Helper 工具 sqlite 基础操作类 字符串操作类 UUID 生成器类 文件基础操作 文件是否存在判断 文件大小获取 读文件 写文件 文件重命名 文件创建/删除 父级目录的获取 目录创建/删除 附录&#xff08;完整代码&#xff09; 日志打印工具 为了便…

C语言:第07天笔记

C语言&#xff1a;第07天笔记 内容提要 循环结构 break与continue 综合案例《猜拳游戏》数组 数组的概念一维数组流程控制 break与continue break 功能&#xff1a; ① 用在switch中&#xff0c;用来跳出switch中的case语句&#xff1b;如果case没有break&#xff0c;可能会产生…