news 2026/4/16 12:49:30

深度学习2-pyTorch学习-张量基本操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习2-pyTorch学习-张量基本操作

张量的索引

如果A是一个矩阵,在matlab中我们取出来A矩阵的第m行n列的元素,可以用A(m,n)。取出来第i行的元素可以用A(i,:),取出来第i列的元素,可以用A(:,i)。而对于pytorch中的张量,它的索引略有不同:

import torch tensor = torch.tensor([[1,2,3],[4,5,6]],dtype = torch.float32) print("原始张量:\n",tensor) #1. ** 索引和切片操作** print("获取第一行:",tensor[0]) print("获取第一行第一列的元素:",tensor[0,0]) print("获取第二列的所有元素:",tensor[:,1]) print("获取第一行的另外一种方法:",tensor[0,:]) #pytorch中tensor的索引是从0开始的

打印出来的:

原始张量: tensor([[1., 2., 3.], [4., 5., 6.]]) 获取第一行: tensor([1., 2., 3.]) 获取第一行第一列的元素: tensor(1.) 获取第二列的所有元素: tensor([2., 5.]) 获取第一行的另外一种方法: tensor([1., 2., 3.])

可以发现,pytorch中的张量的索引默认是从0开始的,例如,我们取矩阵的第1行,就是tensor.[0,:]当然也可以不写冒号,那就是tensor[0]。其次我们可以发现,pytorch中对张量索引的格式是tensor[],采用的是方括号,而不是matlab中的圆括号。

print("张量的最大值:",tensor.max()) print("张量的最大值:",torch.max(tensor)) print("张量的最小值:",tensor.min()) print("张量的均值:",tensor.mean()) maxId = torch.argmax(tensor) print("张量的最大值的索引",maxId) minId = torch.argmin(tensor) print("张量的最小值索引:",minId) max_indices = torch.where(tensor == tensor.max()) print(f"最大值位置 (行, 列): {max_indices}")

张量形状变换

#2. ** 形状变换操作 ** print("\n [形状变换]") reshaped = tensor.view(3,2) # 改变张量形状为3X2,即3行两列 print("改变形状后的张量:\n",reshaped) flattenedTensor = tensor.flatten() # 将张量展平成一维 print("展平后的张量:\n",flattenedTensor)

tensor.view(M,N)可以将张量变为M行N列。注意张量形状改变前后的总元素数量必须一样,否则会报错,例如原来的张量是2X3,那么可以改变为3X2,但是不能变为3X4,例如以下程序:

print("\n [形状变换]") reshaped = tensor.view(3,4) # 改变张量形状 print("改变形状后的张量:\n",reshaped)

输出如下:

reshaped = tensor.view(3,4) # 改变张量形状为3X2,即3行两列 RuntimeError: shape '[3, 4]' is invalid for input of size 6

张量的基本运算

加减乘求和,这些基本运算就是所有运算的基础,操作起来没什么说的

#3. ** 张量的数学运算 ** print("张量的数学运算:\n") tensorAdd = tensor + 10; print("张量加10:\n",tensorAdd) tensorMul = tensor * 2 # 张量乘法 print("张量乘2:\n",tensorMul) tensorDot = tensor.sum() print("张量元素求和:",tensorDot)

pytorch的张量,默认的保存格式都是float型,例如,上面我们原始的张量的输入是整数,但最终打印出来的数都带着个小数点,这就在提示我们,它将数据作为浮点型进行了保存。

矩阵的乘法

#4. ** 与其他张量的操作 ** print("\n[与其他张量操作]") tensor2 = torch.ones(3,2) print("另一个张量:\n",tensor2) tensorDot = torch.matmul(tensor,tensor2) print("张量的矩阵乘法:\n",tensorDot)

这个没什么好所的,就是矩阵乘法罢了。

条件判断

# 5.** 条件判断和筛选 ** print("\n [条件判断和筛选]") mask = tensor > 3 # 判断一个布尔掩码 print("大于3的元素的布尔掩码:\n", mask) filterTensor = tensor[tensor > 3] # 筛选出符合条件的元素 print("大于3的元素:\n",filterTensor)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 22:00:22

GSE宏编译器完整指南:魔兽世界玩家的终极宏编写解决方案

GSE宏编译器完整指南:魔兽世界玩家的终极宏编写解决方案 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. It uses Travis for UnitTests, Coveralls to report on test coverage and…

作者头像 李华
网站建设 2026/4/15 13:00:47

为什么真正的智能体系统,一定要引入“状态机”?

大家好,我是Wise,一个在互联网行业写了 20 多年代码的老兵。这两年 All In 智能体,我越做越确定一件事——所有能长期稳定运行的 Agent,本质上都是一台“状态机”。 不是 LLM 决定系统是否可控,而是“状态管理”决定你…

作者头像 李华
网站建设 2026/4/16 7:49:04

未来的公司不是“部门协作”,而是“智能体协作”

过去 20 年,企业组织的讨论几乎绕不开一个关键词:“协作”。跨部门协作、扁平化协作、敏捷协作、虚拟协作团队……每一波管理潮流,都在试图回答同一个问题:如何让人更高效地一起工作?然而 2025 年以后,这个…

作者头像 李华
网站建设 2026/4/16 12:13:57

CSP-J/S 2025 第一轮游记

前言感觉这次 CSP 打的还可以,达到超过分数线 1010 分的目标了。希望复赛也能拿到可观的分数。当然,You have no egg!。考前三天考前三天。一到机房就和 yanzixuan2024 它们打术士,真不错。考前两天下午 4:00,竞赛生颁奖啦&#x…

作者头像 李华
网站建设 2026/4/16 12:21:00

Amazon Corretto 17终极指南:构建高性能Java应用的完整解决方案

Amazon Corretto 17终极指南:构建高性能Java应用的完整解决方案 【免费下载链接】corretto-17 Amazon Corretto 17 is a no-cost, multi-platform, production-ready distribution of OpenJDK 17 项目地址: https://gitcode.com/gh_mirrors/co/corretto-17 全…

作者头像 李华
网站建设 2026/4/15 13:11:30

程序员面试宝典:Cracking the Coding Interview 第6版高清PDF完整下载

程序员面试宝典:Cracking the Coding Interview 第6版高清PDF完整下载 【免费下载链接】CrackingtheCodingInterview第6版高清完整版PDF下载 《Cracking the Coding Interview》第6版是程序员面试准备的经典之作,本资源提供高清完整PDF版本。书中全面覆盖…

作者头像 李华