pytorch-张量及其运算

索引与切片

1.Pytorch风格的索引
根据Tensor的shape,从前往后索引,依次在每个维度上做索引

import torch
 
a = torch.rand(4, 3, 28, 28)
print(a[0].shape) #取到第一个维度  
torch.Size([3, 28, 28])
print(a[0, 0].shape) # 取到二个维度  
torch.Size([28, 28])
print(a[1, 2, 2, 4])  # 具体到某个元素
tensor(0.1076)

上述代码创建了一个shape=[4, 3, 28, 28]的Tensor,我们可以理解为4张图片,每张图片有3个通道,每个通道是28x28的图像数据。a代表这个Tensor,a后面跟着的列表[]表示对Tensor进行索引,a的维度dim = 4,决定了[]中的元素个数不能超过4个,[]中的值表示对应维度上的哪一个元素,比如 a[0]表示取第一个维度上的第一个元素,可以理解为第一张图片,a[1]表示取第一个维度上的第二个元素,可以理解为第二张图片。a[0, 0]表示取第一个维度上第一个元素与第二个维度上的第一个元素,也就是第一张图片第一个通道的元素。a[1, 2, 2, 4]表示取第一个维度上的第二个元素与第二个维度上的第三个元素与第三个维度上的第三个元素与第四个维度上的第5个元素,也就是第二张图片第三个通道第三行第四列的像素值是一个标量值。

2.python风格的索引

import torch
# 譬如:4张图片,每张三个通道,每个通道28行28列的像素
a = torch.rand(4, 3, 28, 28)  
 
# 在第一个维度上取后0和1,等同于取第一、第二张图片
print(a[:2].shape)  #
torch.Size([2, 3, 28, 28])
 
# 在第一个维度上取0和1,在第二个维度上取0,
# 等同于取第一、第二张图片中的第一个通道
print(a[:2, :1, :, :].shape)  #
torch.Size([2, 1, 28, 28])
 
# 在第一个维度上取0和1,在第二个维度上取1,2,
# 等同于取第一、第二张图片中的第二个通道与第三个通道
print(a[:2, 1:, :, :].shape)  #torch.Size([2, 2, 28, 28])
 
# 在第一个维度上取0和1,在第二个维度上取1,2,
# 等同于取第一、第二张图片中的第二个通道与第三个通道
print(a[:2, -2:, :, :].shape)  #
torch.Size([2, 2, 28, 28])
 
# 使用step隔行采样
# 在第一、第二维度取所有元素,在第三、第四维度隔行采样
# 等同于所有图片所有通道的行列每隔一行或者一列采样
# 注意:下面的代码不包括28
print(a[:, :, 0:28:2, 0:28:2].shape) 
print(a[:, :, ::2, ::2].shape)  # 等同于上面语句

注意:负值的索引即表示倒数第几个元素,-2就是倒数第二个元素

3.index_select()选择特定索引

index_select(dim,index)

功能:从张量的某个维度的指定位置选取数据。
参数:
dim:表示从第几维挑选数据,类型为int值;
index:表示从第一个参数维度中的哪个位置挑选数据,类型为torch.Tensor类的实例;

选择特定下标有时候很有用,比如上面的a这个Tensor可以看作4张RGB(3通道)的MNIST图像,长宽都是28px。那么在第一维度上可以选择特定的图片,在第二维度上选择特定的通道,在第三维度上选择特定的行等:

# 选择第一张和第三张图
print(a.index_select(0, torch.tensor([0, 2])).shape)
#torch.Size([2, 3, 28, 28])

# 选择R通道和B通道
print(a.index_select(1, torch.tensor([0, 2
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch提供了丰富的张量算术运算,可以对张量进行各种复杂的运算。你可以使用PyTorch的算术函数来执行加法、减法、乘法和除法操作。例如,你可以使用add()函数执行张量的加法运算,subtract()函数执行减法运算,multiply()函数执行乘法运算,divide()函数执行除法运算。 此外,PyTorch还支持复杂数的算术运算,通过安装"pytorch-complex-tensor"库,你可以使用该库中提供的ComplexTensor类来进行复杂数的模拟算术运算,该库支持渐变。你可以使用ComplexTensor类来创建初始张量,并在其中执行复杂的算术运算。 下面是一个使用PyTorch进行张量算术运算的例子: ``` import torch # 创建两个张量 a = torch.tensor([1, 2, 3]) b = torch.tensor([4, 5, 6]) # 执行加法运算 c = torch.add(a, b) # 执行减法运算 d = torch.subtract(a, b) # 执行乘法运算 e = torch.multiply(a, b) # 执行除法运算 f = torch.divide(a, b) # 输出结果 print(c) # tensor([5, 7, 9]) print(d) # tensor([-3, -3, -3]) print(e) # tensor([4, 10, 18]) print(f) # tensor([0.25, 0.4, 0.5]) ``` 通过使用PyTorch张量算术运算,你可以对张量进行各种复杂的运算,并得到所需的结果。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [[PyTroch系列-7]:PyTorch基础 - 张量的算术运算](https://blog.csdn.net/HiWangWenBing/article/details/119428023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pytorch-complex-tensor:Pytorch的非官方复张量和标量支持](https://download.csdn.net/download/weixin_42128537/18698908)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值