【PyTorch】PyTorch中张量(Tensor)切片操作

本文详细介绍了在PyTorch中如何使用张量切片操作获取和修改元素,包括基本的切片方法,torch.where()函数的应用,以及如何使用torch.tril()和torch.triu()置零特定区域的元素以及torch.diag()保留对角线元素。
摘要由CSDN通过智能技术生成

PyTorch深度学习总结

第三章 PyTorch中张量(Tensor)切片操作



一、前言

上文介绍了PyTorch中改变张量(Tensor)形状的操作,本文主要介绍张量切片操作。


二、获取张量中的元素

1、切片(行、列数)方法

# 引入库
import torch

# 生成张量
A = torch.arange(9).reshape(3, 3)
print(A)

生成张量A:
tensor(
[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])


现截取A[0]:

print(A[0]) # 截取最外围括号内第一个括号的内容,第一个维度第一行的内容

结果为:
tensor([0, 1, 2])

# 引入库
import torch

# 生成张量
B = torch.arange(9).reshape(1, 3, 3)
print(B)

生成张量B:
tensor(
[[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]])


现截取B[0]:

print(B[0]) # 截取最外围括号内第括号的内容,第一个维度第一行的内容

结果为:
tensor(
[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])

③根据上文张量B进行截取

print(B[0, 1:2, 1:2])

结果为:
tensor([[4]])
注意此时[1:2]指第2个元素开头到第三个元素为至,且不包含第三个元素。(属于包含左边不包含右边,先行后列)


print(B[0, 1:3, 1:2])

结果为:
tensor([[4], [7]])


print(B[0, -1, -2])

结果为:
tensor(7)


print(B[0, -3:-1, -2]) # 第一个维度,倒数第三行到倒数二行,倒数第二列的元素

结果为:
tensor([1, 4])

④通过比较关系输出元素

print(B[B>=3])

结果为:
tensor([3, 4, 5, 6, 7, 8])
注意此处为获取元素组成1维张量

2、torch.where()函数

C = -B
D = torch.where(B>4, B, C)
print(D)

输出结果为:
tensor(
[[[ 0, -1, -2],
[-3, -4, 5],
[ 6, 7, 8]]])

3、使元素置零的操作

函数描述
torch.tril(A, diagonal=0)将A以第一个元素为对角线的直线,将上三角置零
torch.triu(A, diagonal=0)将A以第一个元素为对角线的直线,将下三角置零
torch.diag(A)保留对角线,将其他元素全部置零,输入必须是二维张量

示例:

torch.tril():

E1 = torch.tril(B, diagonal=0)
print(E1)

输出结果为:
tensor(
[[[0, 0, 0],
[3, 4, 0],
[6, 7, 8]]])


E2 = torch.tril(B, diagonal=1)
print(E2)

输出结果为:
tensor(
[[[0, 1, 0],
[3, 4, 5],
[6, 7, 8]]])

torch.triu():

F = torch.triu(B, diagonal=0)
print(F)

输出结果为:
tensor(
[[[0, 1, 2],
[0, 4, 5],
[0, 0, 8]]])

torch.diag():

H = torch.diag(A)
print(H)

输出结果为:
tensor([0, 4, 8])


  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值