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

深度学习02-pytorch-04-张量的运算函数

在 PyTorch 中,张量(tensor)运算是核心操作之一,PyTorch 提供了丰富的函数来进行张量运算,包括数学运算、线性代数、索引操作等。以下是常见的张量运算函数及其用途:

1. 基本数学运算

  • 加法运算torch.add(a, b) 或者直接使用 +

    a = torch.tensor([1, 2])
    b = torch.tensor([3, 4])
    c = torch.add(a, b)  # [4, 6]
    # 或者
    c = a + b

  • 减法运算torch.sub(a, b) 或者直接使用 -

    c = torch.sub(a, b)  # [-2, -2]
    # 或者
    c = a - b

  • 乘法运算(逐元素)torch.mul(a, b) 或者直接使用 *

    c = torch.mul(a, b)  # [3, 8]
    # 或者
    c = a * b

  • 除法运算(逐元素)torch.div(a, b) 或者直接使用 /

    c = torch.div(a, b)  # [0.3333, 0.5]
    # 或者
    c = a / b

  • 指数运算torch.pow(a, b) 或者 a ** b

    c = torch.pow(a, b)  # a^b -> [1^3, 2^4] = [1, 16]
    # 或者
    c = a ** b

  • 求幂函数torch.sqrt(a)torch.exp(a)torch.log(a)

    c = torch.sqrt(torch.tensor([4.0, 9.0]))  # [2.0, 3.0]
    d = torch.exp(torch.tensor([1.0, 2.0]))  # e^1, e^2
    e = torch.log(torch.tensor([1.0, 2.0]))  # log(1), log(2)

2. 聚合操作

  • 求和torch.sum(tensor, dim=None)

    a = torch.tensor([[1, 2], [3, 4]])
    total_sum = torch.sum(a)  # 全局求和: 10
    row_sum = torch.sum(a, dim=1)  # 对每一行求和: [3, 7]

  • 求平均值torch.mean(tensor, dim=None)

    avg = torch.mean(a.float())  # 平均值: 2.5

  • 最大值torch.max(tensor)torch.max(tensor, dim)

    max_val = torch.max(a)  # 最大值: 4
    max_val_row, idx = torch.max(a, dim=1)  # 每一行的最大值: [2, 4]

  • 最小值torch.min(tensor)torch.min(tensor, dim)

    min_val = torch.min(a)  # 最小值: 1

  • 标准差torch.std(tensor)

    std = torch.std(a.float())  # 标准差

3. 线性代数运算

  • 矩阵乘法torch.mm(a, b) 或者使用 @

    a = torch.tensor([[1, 2], [3, 4]])
    b = torch.tensor([[5, 6], [7, 8]])
    c = torch.mm(a, b)  # 矩阵乘法
    # 或者
    c = a @ b

  • 矩阵转置torch.t(tensor) 或者使用 .T

    a_t = torch.t(a)  # 转置
    # 或者
    a_t = a.T

  • 矩阵求逆torch.inverse(tensor)

    a = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
    a_inv = torch.inverse(a)  # 求矩阵的逆

  • 行列式torch.det(tensor)

    det = torch.det(a)  # 计算行列式

  • 特征值和特征向量torch.eig(tensor, eigenvectors=True)

    e_vals, e_vecs = torch.eig(a, eigenvectors=True)  # 计算特征值和特征向量

4. 张量形状操作

  • 张量重塑torch.reshape(tensor, new_shape)tensor.view(new_shape)

    a = torch.tensor([[1, 2], [3, 4], [5, 6]])
    reshaped = torch.reshape(a, (2, 3))  # 改变形状为 (2, 3)

  • 张量扩展torch.unsqueeze(tensor, dim)torch.squeeze(tensor, dim)

    a = torch.tensor([1, 2, 3])
    unsqueezed = torch.unsqueeze(a, 0)  # 在第0维添加一个新维度 -> [[1, 2, 3]]
    squeezed = torch.squeeze(unsqueezed)  # 移除维度 -> [1, 2, 3]

  • 拼接张量torch.cat(tensors, dim)torch.stack(tensors, dim)

    a = torch.tensor([1, 2])
    b = torch.tensor([3, 4])
    concatenated = torch.cat((a, b), dim=0)  # 拼接 -> [1, 2, 3, 4]stacked = torch.stack((a, b), dim=0)  # 堆叠 -> [[1, 2], [3, 4]]

5. 索引操作

  • 通过索引选择元素tensor[index]

    a = torch.tensor([[1, 2], [3, 4], [5, 6]])
    selected = a[0, 1]  # 选择第0行第1列的元素 -> 2

  • 高级索引tensor[range]、布尔索引等

    a = torch.tensor([1, 2, 3, 4, 5])
    selected = a[a > 3]  # 选择大于3的元素 -> [4, 5]

6. 随机数生成

  • 均匀分布随机数torch.rand(size)

    random_tensor = torch.rand(3, 3)  # 生成一个 3x3 的均匀分布随机张量

  • 正态分布随机数torch.randn(size)

    normal_random = torch.randn(3, 3)  # 生成一个 3x3 的正态分布随机张量

  • 指定范围的整数随机数torch.randint(low, high, size)

    randint_tensor = torch.randint(0, 10, (3, 3))  # 生成 0 到 10 之间的随机整数

7. 广播机制

  • 广播运算:当张量的形状不同,但维度兼容时,PyTorch 会自动应用广播机制扩展张量。

    a = torch.tensor([1, 2, 3])
    b = torch.tensor([[1], [2], [3]])
    c = a + b  # 广播操作

8. 自动微分

  • 启用自动微分requires_grad=True

    x = torch.tensor(2.0, requires_grad=True)
    y = x ** 2
    y.backward()  # 计算梯度
    print(x.grad)  # 输出: 4.0

总结

PyTorch 中的张量运算函数非常丰富,从基本的数学运算到高级的线性代数操作、形状调整和随机数生成,这些函数让张量的处理非常灵活和高效。通过这些运算,你可以实现各种数值计算和深度学习模型的训练。

相关文章:

深度学习02-pytorch-04-张量的运算函数

在 PyTorch 中,张量(tensor)运算是核心操作之一,PyTorch 提供了丰富的函数来进行张量运算,包括数学运算、线性代数、索引操作等。以下是常见的张量运算函数及其用途: 1. 基本数学运算 加法运算&#xff1a…...

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【文件系统】上

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核(LiteOS-M) 轻量系统内核&#…...

NISP 一级 | 8.4 《网络安全法》

关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 2017 年 6 月 1 日,《中华人民共和国网终安全法》(以下简称《网终安全法》)正式实施。这是我国第一部全面规范网络空间安全管理方面问题的基础性法律&#xff0…...

实现人体模型可点击

简化需求:实现项目内嵌人体模型,实现点击不同部位弹出部位名称 一:优先3d, 方案:基于three.js,.gltf格式模型,vue3 缺点:合适且免费的3d模型找不到,因为项目对部位有要…...

C++ | Leetcode C++题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> levelOrder(Node* root) {if (!root) {return {};}vector<vector<int>> ans;queue<Node*> q;q.push(root);while (!q.empty()) {int cnt q.size();vector<…...

Pandas简介

Pandas 是一个流行的开源数据分析库&#xff0c;它是基于 NumPy 构建的&#xff0c;为 Python 编程语言提供了高性能、易用的数据结构和数据分析工具。Pandas 主要用于数据清洗、数据转换、数据分析等任务&#xff0c;使得数据处理工作变得更加高效和便捷。 Pandas 的两个主要…...

Python | Leetcode Python题解之第430题扁平化多级双向链表

题目&#xff1a; 题解&#xff1a; class Solution:def flatten(self, head: "Node") -> "Node":def dfs(node: "Node") -> "Node":cur node# 记录链表的最后一个节点last Nonewhile cur:nxt cur.next# 如果有子节点&#…...

机器人机构、制造

简单整理一下&#xff0c;在学习了一些运动学和动力学之类的东西&#xff0c;简单的整合了一些常用的机械结构和图片。 1.电机&#xff1a; 市面上的电机有&#xff1a;直流电机&#xff0c;交流电机&#xff0c;舵机&#xff0c;步进电机&#xff0c;电缸&#xff0c;无刷电…...

《拿下奇怪的前端报错》:nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践

有些前端的小伙伴可能会好奇&#xff0c;nvm是什么&#xff1f;这里接简单介绍下&#xff0c;它是一个Nodejs版本管理工具。为什么需要它呢&#xff1f;当然是需要多个Nodejs版本的时候&#xff0c;那什么时候需要多个Nodejs版本&#xff1f;那肯定是在有点年头的公司了&#x…...

5.《DevOps》系列K8S部署CICD流水线之K8S通过Yaml部署GitLab

架构 服务器IP服务名称硬件配置192.168.1.100k8s-master8核、16G、120G192.168.1.101k8s-node18核、16G、120G192.168.1.102k8s-node28核、16G、120G192.168.1.103nfs2核、4G、500G操作系统:Rocky9.3 后续通过K8S部署Jenkins NFS的SC创建参考:2.《DevOps》系列K8S部署CICD流…...

[SAP ABAP] 创建数据库视图和维护视图

数据准备 学校表(ZDBT_SCH_437) 学生表(ZDBT_STU_437) 学校表(ZDBT_SCH_437)与学生表(ZDBT_STU_437)字段 学校表(ZDBT_SCH_437)与学生表(ZDBT_STU_437)行数据明细 1.创建数据库视图 使用SE11创建数据库视图 填写视图名称ZV_DATABASEV_437&#xff0c;点击创建按钮 选择数据库视…...

【最快最简单的排序 —— 桶排序算法】

最快最简单的排序 —— 桶排序算法 桶排序是一种排序算法&#xff0c;其工作原理是将数据分到有限数量的桶子里&#xff0c;然后对每个桶内的元素进行单独排序&#xff0c;最后依次把各个桶中的记录列出来。桶排序的效率取决于映射函数的选择和桶的数量。 桶排序适用于数据分…...

AI时代,服务器厂商能否打破薄利的命运?

文&#xff5c;刘俊宏 编&#xff5c;王一粟 AI大模型正在引发新一轮的“算力焦渴”。 近日&#xff0c;OpenAI刚发布的o1大模型再次刷新了大模型能力的上限。对比上一次迭代的版本&#xff0c;o1的推理能力全方位“吊打”了GPT-4o。更优秀的能力&#xff0c;来自与o1将思维…...

2024年9月python二级易错题和难题大全(附详细解析)(二)

2024年9月python二级易错题和难题大全(附详细解析)(二) 第1题第2题第3题第4题第5题第6题第7题第8题第9题第10题第11题第12题第13题第14题第15题第16题第17题第18题第19题第20题第1题 1、以下代码的输出结果是() x = 12 + 3 * ((5 * 8) - 14) // 6 print(x) A、25.0 B、6…...

4.结构型设计模式 - 第1回:引言与适配器模式 (Adapter Pattern) ——设计模式入门系列

一、引言 在现代软件开发中&#xff0c;设计模式是帮助我们解决复杂问题的工具&#xff0c;它们提供了在常见场景下重用已验证解决方案的途径。而结构型设计模式主要关注类与对象之间的组合方式&#xff0c;旨在通过增强灵活性和降低耦合度来改进代码的结构。 本次讨论的是结…...

解决mybatis plus 中 FastjsonTypeHandler无法正确反序列化List类型的问题

由于是根据自动映射类型&#xff0c;我们设置的字段类型是List 也就是反序列化的时候也只是用 FastjsonTypeHandler中的 Override protected Object parse(String json) { return JSON.parseObject(json, type); } 反序列化方法&#xff0c;这是type为List 反序列后我们并没…...

MacOS安装homebrew,jEnv,多版本JDK

1 安装homebrew homebrew官网 根据官网提示&#xff0c;运行安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装后&#xff0c;bash会提示执行两条命令 (echo; echo eval "$(/opt/homebrew/b…...

【HTTP】认识 URL 和 URL encode

文章目录 认识 URLURL 基本格式**带层次的文件路径****查询字符串****片段标识符** URL encode 认识 URL 计算机中非常重要的概念&#xff0c;并不仅仅是在 HTTP 中使用。用来描述一个网络资源所处的位置&#xff0c;全称“唯一资源定位符” URI 是“唯一资源标识符“严格的说…...

【AI学习笔记】初学机器学习西瓜书概要记录(二)常用的机器学习方法篇

初学机器学习西瓜书的概要记录&#xff08;一&#xff09;机器学习基础知识篇(已完结) 初学机器学习西瓜书的概要记录&#xff08;二&#xff09;常用的机器学习方法篇(持续更新) 初学机器学习西瓜书的概要记录&#xff08;三&#xff09;进阶知识篇(待更) 文字公式撰写不易&am…...

[SDX35+WCN6856]SDX35 + WCN6856 默认增加打包wifi配置hostapd_24g.conf和hostapd_5g.conf操作方法

SDX35 SDX35介绍 SDX35设备是一种多模调制解调器芯片,支持 4G/5G sub-6 技术。它是一个4nm芯片专为实现卓越的性能和能效而设计。它包括一个 1.9 GHz Cortex-A7 应用处理器。 SDX35主要特性 ■ 3GPP Rel. 17 with 5G Reduced Capability (RedCap) support. Backward compati…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...