PyTorch中张量(TensorFlow)操作方法和属性汇总详解和代码示例

1、张量的操作汇总

下面是 PyTorch 中常见的 张量操作方法汇总,包括 创建、索引、变换、数学运算、广播机制、维度操作 等内容,并附上详解和代码示例,便于系统学习与实战参考。


一、张量创建(torch.tensor 等)

import torch# 标量(0维张量)
a = torch.tensor(3.14)# 1维张量
b = torch.tensor([1.0, 2.0, 3.0])# 2维张量
c = torch.tensor([[1, 2], [3, 4]])# 全 0 / 全 1
zeros = torch.zeros((2, 3))
ones = torch.ones((3, 3))# 均匀分布随机数
rand = torch.rand((2, 2))# 正态分布
normal = torch.randn(2, 3)# 固定范围整数
int_rand = torch.randint(0, 10, (3, 3))

二、张量属性(维度、形状、类型)

x = torch.rand(2, 3)print(x.shape)    # torch.Size([2, 3])
print(x.dtype)    # torch.float32
print(x.ndim)     # 2
print(x.size())   # same as x.shape

三、索引与切片(Indexing & Slicing)

x = torch.tensor([[1, 2, 3], [4, 5, 6]])print(x[0])       # 第0行 [1, 2, 3]
print(x[:, 1])    # 所有行的第1列 [2, 5]
print(x[1, 2])    # 第1行第2列 -> 6# 修改元素
x[0, 1] = 10

四、形状变换(Reshape)

x = torch.arange(12)     # [0, 1, ..., 11]
x = x.view(3, 4)         # reshape 为 (3,4)x = x.reshape(2, 6)      # reshape 新形状
x = x.flatten()          # 转为 1D
x = x.unsqueeze(0)       # 增加一维 (batch-like)
x = x.squeeze()          # 去除多余维度

五、数学运算

元素级运算(+,-,*,/)

a = torch.tensor([1., 2., 3.])
b = torch.tensor([4., 5., 6.])print(a + b)
print(a * b)
print(torch.exp(a))
print(torch.sqrt(b))

矩阵运算

A = torch.tensor([[1., 2.], [3., 4.]])
B = torch.tensor([[5., 6.], [7., 8.]])# 点积/矩阵乘法
print(torch.matmul(A, B))   # 或 A @ B

六、广播机制(Broadcasting)

a = torch.tensor([[1], [2], [3]])   # shape (3,1)
b = torch.tensor([10, 20, 30])      # shape (3,)# 广播加法 => shape (3,3)
print(a + b)

七、维度操作:拼接、拆分、转置

a = torch.ones((2, 3))
b = torch.zeros((2, 3))# 拼接
cat = torch.cat([a, b], dim=0)  # shape (4, 3)# 拆分
split = torch.split(cat, 2, dim=0)  # 拆成两个 (2,3)# 转置
x = torch.rand(2, 3)
print(x.T)   # shape (3,2)

八、常用统计操作

x = torch.tensor([[1., 2.], [3., 4.]])print(x.sum())           # 所有元素求和
print(x.mean())          # 平均值
print(x.max(), x.min())  # 最大最小值
print(x.argmax(), x.argmin())  # 最大/最小索引

九、条件与掩码操作(布尔索引)

x = torch.tensor([1, 2, 3, 4, 5])
mask = x > 3
print(x[mask])  # 输出 [4, 5]

十、张量复制与共享

a = torch.tensor([1, 2, 3])
b = a.clone()     # 拷贝,不共享内存
c = a             # 共享内存

总结思维导图(简要)

张量操作:
├── 创建(tensor, zeros, randn, randint)
├── 属性(shape, dtype, ndim)
├── 索引(x[i], x[:, j])
├── 运算(+ - * /, matmul, exp, log)
├── 广播(自动扩展维度)
├── 变换(view, reshape, squeeze, unsqueeze)
├── 拼接/分割(cat, stack, split, chunk)
├── 统计分析(sum, mean, max, argmax)
├── 条件掩码(mask, where)
└── 复制(clone, detach)

2、张量属性汇总

PyTorch 中张量(Tensor)是数据的基本结构。每个张量都具有一组属性(Attributes)来描述它的维度、数据类型、设备、存储结构等信息。


张量的核心属性汇总

属性名含义说明示例值
.shape / .size()张量的形状(各维度大小)torch.Size([3, 4])
.ndim张量的维度数(维度的数量)2
.dtype数据类型torch.float32
.device存储设备:CPU 或 GPUcpu, cuda:0
.requires_grad是否记录梯度(用于自动求导)True/False
.is_leaf是否是叶子节点(可用于反向传播分析)True/False
.grad梯度值(反向传播后赋值)None 或张量
.data原始数据(无梯度跟踪)张量数据
.T转置(仅适用于二维张量)tensor.T
.storage()存储对象(高级属性)FloatStorage

示例代码:张量属性全面演示

import torch# 创建张量
a = torch.randn(3, 4, dtype=torch.float32, requires_grad=True)print("张量 a:\n", a)
print("\n== 张量属性 ==")
print("形状 shape:", a.shape)
print("维度 ndim:", a.ndim)
print("数据类型 dtype:", a.dtype)
print("所在设备 device:", a.device)
print("是否需要梯度 requires_grad:", a.requires_grad)
print("是否为叶子节点 is_leaf:", a.is_leaf)
print("梯度 grad:", a.grad)
print("原始数据 data:\n", a.data)
print("转置 T:\n", a.T)
print("存储 storage:", a.storage())

进阶示例:查看 GPU 张量属性 + 修改属性

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")b = torch.ones((2, 3), dtype=torch.float64, device=device)
print("\n张量 b 属性:")
print("b.shape:", b.shape)
print("b.dtype:", b.dtype)
print("b.device:", b.device)# 修改数据类型和设备
b2 = b.to(dtype=torch.float32, device='cpu')
print("\n修改后:")
print("b2.dtype:", b2.dtype)
print("b2.device:", b2.device)

示例:grad 与 requires_grad 的关系

x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x ** 2
z = y.sum()print("z:", z)
z.backward()
print("x.grad:", x.grad)  # dz/dx = 2x

Tips

  • .shape.size() 等价,都返回 torch.Size 对象。
  • .is_leaf 为 True 的张量通常是直接创建的变量,反向传播时只保留其梯度。
  • .data 会返回张量本身的数据,但不参与自动求导

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

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

相关文章

统一日志格式规范与 Filebeat+Logstash 实践落地

背景 在多部门、多技术栈并存的企业环境中,日志收集与分析是保障系统稳定运行的核心能力之一。然而,不同开发团队采用各异的日志打印方式,导致日志数据结构混乱,严重影响后续的收集、存储、检索与告警效率。 比如我们大部门就有多…

【鸿蒙HarmonyOS】鸿蒙app开发入门到实战教程(三):实现一个音乐列表的页面

鸿蒙里面,实现一个音乐播放的列表,模拟数组的数据展示 实现效果代码实现 准备数据 songs:SongItemTypes[] [{img:https://yjy-teach-oss.oss-cn-beijing.aliyuncs.com/HeimaCloudMusic/0.jpg,name:直到世界的尽头,author:WANDS},{img:https://yjy-teach-oss.oss-cn…

2025年渗透测试面试题总结-2025年HW(护网面试) 47(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 2025年HW(护网面试) 47 1. UDF提权 2. 命令执行与代码执行的区别 3. 文件包含利用姿势 4. 漏洞复现流程 …

iPhone 数据擦除软件评测(最新且全面)

当您准备出售、捐赠或回收 iPhone 时,仅仅恢复出厂设置并不足以保证您的个人数据彻底消失。专业的 iPhone 数据擦除软件采用先进的技术,确保您的敏感信息永久无法恢复。本文回顾了十种流行的 iPhone 数据擦除工具,详细介绍了它们的功能、优点…

Qt 将触摸事件转换为鼠标事件(Qt4和Qt5及以上版本)

在Qt中,触摸事件(QTouchEvent)和鼠标事件(QMouseEvent)是两种不同的输入事件类型。通常情况下,触摸事件不会自动转换为鼠标事件,因为它们代表的是不同的输入设备(触摸屏 vs 鼠标&…

Blender 云渲染高效流程:渲染 101 集群加速实战​

一、核心优势:适配 Blender 全场景需求​ ✅ 全渲染器深度兼容​ Cycles(CPU/GPU 模式):云端 4090 显卡渲染速度比本地快 12 倍,支持 8K 分辨率 16K 纹理无压力​ Eevee 实时渲染:集群同步输出预览动画&am…

SQL学习记录01

什么是SQL? Structured Query Language (结构化查询语言),与关系型数据库进行通信的标准语言。什么是数据库?“按照数据结构来组织、存储、和管理数据的仓库。”一个长期存储在计算机内的、有组织的、可共享的、统一管…

医疗项目如何应对法规变更?

医疗项目应对法规变更的关键策略包括建立法规监测体系、及时内部培训和沟通、调整业务流程和合规标准、技术系统快速迭代升级。 其中,建立有效的法规监测体系尤其重要。这意味着企业需要实时关注监管机构发布的政策更新和公告,迅速理解法规变化内容及对自…

AI Top10

AI 前十排名排名团队/机构名称国家核心优势领域1DeepMind英国强化学习、Alpha系列模型2OpenAI美国GPT系列、多模态大模型3DeepSeek中国高效NLP模型、开源生态建设4Google Brain美国Transformer架构、TensorFlow框架5Meta AI (FAIR)美国计算机视觉、Llama系列模型6NVIDIA Resear…

LabVIEW通知器函数应用

介绍LabVIEW通知器(Notifier)函数,演示两类并行循环通信场景:单对循环数据交互、多循环通知聚合,含程序框图(数据发送 / 接收、多循环通知)与前面板(数据显示)。功能说明…

推荐《Python 编程:从入门到实践》之Python编程的基础知识

在 Python 学习资源琳琅满目的当下,《Python 编程:从入门到实践》脱颖而出,堪称 Python 入门的不二之选。本书由经验丰富的教育工作者撰写,以清晰易懂的语言和循序渐进的方式,引领读者从 Python 的基础语法逐步迈向实际…

Kafka入门和基础配置

目录Kafka入门消息引擎系统ABC快速搞定Kafka术语kafka三层消息架构名词术语Kafka基础Kafka部署参考重要配置参数Broker端参数Topic级别参数JVM参数Kafka是消息引擎系统,也是分布式流处理平台Kafka入门 消息引擎系统ABC 民间版:系统 A 发送消息给消息引…

OPENPPP2 VEthernet 网络协议堆栈(CTCP)VNetStack 深度技术解析

🌐 OPENPPP2 VEthernet 网络协议堆栈(CTCP)VNetStack 深度技术解析🏗️ 一、系统架构全景图 #mermaid-svg-FdlbKZCGQDDbvOL6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermai…

Gartner发布2025年中国网络安全成熟度曲线:网络安全的重点正转向保护AI、推动业务转型和增强组织韧性

网络安全的重点正转向保护人工智能、推动业务转型和增强组织韧性。首席信息官及其安全和风险管理主管可以利用这份技术成熟度曲线来识别实用且高价值的技术和实践,从而保持安全和敏捷。 战略规划假设 到2027年,60%的中国大型组织将在安全运营中心&#x…

网络准入控制系统的作用解析,2025年保障企业入网安全第一道防线

在当今数字化时代,网络已成为企业运营的基础,随着网络的广泛应用,网络准入控制系统作为保障网络安全的重要手段,正发挥着至关重要的作用。保障网络安全网络准入控制系统如同网络的忠诚卫士,它为网络大门安装了智能锁&a…

java基础(day09)

目录 1.继承的作用 2.继承树 3.protected和super protected super 注:super/this()--构造方法,第一行,一般不同时出现 4.向上向下转型 向上转型 向下转型 final 小结 1.继承的作用 理解:首先就是可以实现代码复用&#x…

如何进行选择。

初始理解问题 首先,我们需要明确题目在问什么。题目“House Robber”描述的是一个强盗在一排房屋前,每个房屋都有一定数量的钱。强盗不能连续抢劫两个相邻的房屋,否则会触发警报。目标是抢劫到最多的钱。 动态规划的思路 这个问题可以使用动态…

PHP语法高级篇(三):Cookie与会话

Cookie与会话在 Web 编程中十分实用:Cookie 能实现一周免登录,还能记住用户的主题偏好;会话可保存当前用户信息,也能临时存储购物车数据。本篇文章将记录Cookie与会话的学习过程。 一、Cookie cookie 常用于识别用户。cookie 是服…

11. JVM中的分代回收

1. JVM介绍和运行流程-CSDN博客 2. 什么是程序计数器-CSDN博客 3. java 堆和 JVM 内存结构-CSDN博客 4. 虚拟机栈-CSDN博客 5. JVM 的方法区-CSDN博客 6. JVM直接内存-CSDN博客 7. JVM类加载器与双亲委派模型-CSDN博客 8. JVM类装载的执行过程-CSDN博客 9. JVM垃圾回收…

基于PaddleOCR的营业执照识别与数据分析系统

基于PaddleOCR的营业执照识别与数据分析系统 1. 项目概述 本项目旨在利用百度PaddleOCR技术识别营业执照图片中的关键信息,结合自然语言处理(NLP)和卷积神经网络(CNN)对OCR结果进行分类处理,最后对识别出的收入流水数据进行深度分析与可视化展示。系统将实现从图像识别到数…