赞
踩
第三章 PyTorch中张量(Tensor)切片操作
上文介绍了PyTorch中改变张量(Tensor)形状
的操作,本文主要介绍张量切片
操作。
①
# 引入库 import torch # 生成张量 A = torch.arange(9).reshape(3, 3) print(A)
- 1
- 2
- 3
- 4
- 5
- 6
生成张量A:
tensor(
[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
现截取A[0]:
print(A[0]) # 截取最外围括号内第一个括号的内容,第一个维度第一行的内容
- 1
结果为:
tensor([0, 1, 2])
②
# 引入库 import torch # 生成张量 B = torch.arange(9).reshape(1, 3, 3) print(B)
- 1
- 2
- 3
- 4
- 5
- 6
生成张量B:
tensor(
[[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]])
现截取B[0]:
print(B[0]) # 截取最外围括号内第括号的内容,第一个维度第一行的内容
- 1
结果为:
tensor(
[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
③根据上文张量B进行截取
print(B[0, 1:2, 1:2])
- 1
结果为:
tensor([[4]])
注意此时[1:2]指第2个元素开头到第三个元素为至,且不包含第三个元素。(属于包含左边不包含右边,先行后列)
print(B[0, 1:3, 1:2])
- 1
结果为:
tensor([[4], [7]])
print(B[0, -1, -2])
- 1
结果为:
tensor(7)
print(B[0, -3:-1, -2]) # 第一个维度,倒数第三行到倒数二行,倒数第二列的元素
- 1
结果为:
tensor([1, 4])
④通过比较关系输出元素
print(B[B>=3])
- 1
结果为:
tensor([3, 4, 5, 6, 7, 8])
注意此处为获取元素组成1维张量
C = -B D = torch.where(B>4, B, C) print(D)
- 1
- 2
- 3
输出结果为:
tensor(
[[[ 0, -1, -2],
[-3, -4, 5],
[ 6, 7, 8]]])
函数 | 描述 |
---|---|
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)
- 1
- 2
输出结果为:
tensor(
[[[0, 0, 0],
[3, 4, 0],
[6, 7, 8]]])
E2 = torch.tril(B, diagonal=1) print(E2)
- 1
- 2
输出结果为:
tensor(
[[[0, 1, 0],
[3, 4, 5],
[6, 7, 8]]])
torch.triu():
F = torch.triu(B, diagonal=0) print(F)
- 1
- 2
输出结果为:
tensor(
[[[0, 1, 2],
[0, 4, 5],
[0, 0, 8]]])
torch.diag():
H = torch.diag(A) print(H)
- 1
- 2
输出结果为:
tensor([0, 4, 8])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。