深度学习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)
相关推荐
用户1474853079741 天前
AI-动手深度学习环境搭建-d2l
深度学习
OpenBayes贝式计算1 天前
解决视频模型痛点,TurboDiffusion 高效视频扩散生成系统;Google Streetview 涵盖多个国家的街景图像数据集
人工智能·深度学习·机器学习
OpenBayes贝式计算1 天前
OCR教程汇总丨DeepSeek/百度飞桨/华中科大等开源创新技术,实现OCR高精度、本地化部署
人工智能·深度学习·机器学习
在人间耕耘2 天前
HarmonyOS Vision Kit 视觉AI实战:把官方 Demo 改造成一套能长期复用的组件库
人工智能·深度学习·harmonyos
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
homelook2 天前
Transformer与电池管理系统(BMS)的结合是当前 智能电池管理 的前沿研究方向
人工智能·深度学习·transformer
ccLianLian2 天前
强化学习·导论
深度学习
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码2 天前
嵌入式学习路线
学习
机 _ 长2 天前
Transformer架构深度解析:从翻译模型到大语言模型的核心技术
人工智能·深度学习