torch會自動從左向右索引
例子:
a = torch.randn(4,
3,28,
28)
表示類似乙個cnn 的的輸入資料,4表示這個batch一共有4張**,而3表示的通道數為3(rgb),(28,28)表示的大小
基本索引
print
(a[0
].shape)
#torch.size([3,28,28])
print
(a[0,0
].shape)
#torch.size([28,28])
print
(a[0,0
,2,4
])#tensor(0.8082)
連續選取print
(a[:2]
.shape
#torch.size([2,3,28,28])
#由於是兩張,所以第一維變為2
print
(a[:2,
:1,:
,:].shape)
print
(a[:2,
:1].shape)
#torch.size(2,1,28,28)
⭐索引6:從後面取(-1表示最後乙個,從最後乙個取到最後,也就是乙個通道)
print
(a[:2,
-1:,
:,:]
.shape)
#torch.size(2,1,28,28)
規則間隔索引
print
(a[:,:
,0:28
:2,0
:28:2
].shape)
print
(a[:,:
,::2
,::2
].shape)
#torch.size([4,3,14,14])
索引總結
start : end : step
:
都取
x:
從x取到最後:x
從開始取到xx:y
從x取到y
x:y:z
從x到y每隔z個點取樣一次
不規則間隔索引
使用index_select()函式
a.index_select(
0,torch.tensor([0
,2])
).shape
#【2,3,28,28】
同理:選擇了兩個通道
a.index_select(
1,torch.tensor([1
,2])
).shape
#【4,2,28,28】
同理:只取8行
a.index_select(
2,torch.arange(8)
).shape
#【4,2,8,28】
任意多的維度索引
使用符號:...
例子:
a[..
.].shape
#[4,3,28,28]a[0
,...
].shape
#[3,28,28]a[0
,1,.
..].shape
#[4,28,28]a[.
..,2
].shape
#[4,3,28,2]
使用掩碼來索引
函式:.masked_select()
會將篩選出來的元素打平(因為無法維護原來的shape)
x = torch.randn(2,
3)print
(x)tensor([[
-1.3081,-
0.5651,-
0.9843],
[1.0051,-
0.3829
,0.6300]]
)mask = x.ge(
0.5)
#大於等於0.5的元素
print
(mask)
tensor([[
false
,false
,false],
[true
,false
,true]]
)z = torch.masked_select(x,mask)
print
(z)tensor(
[1.0051
,0.6300
])
打平後的索引
例子:使用take函式:是將輸入的tensor打平之後進行index的選擇
src = torch.tensor([[
4,3,
5],[
6,7,
8]])
torch.take(src,torch.tensor([0
,2,8
]))#tensor([4,5,8])
Pytorch 索引與切片
引言 本篇介紹pytorch 的索引與切片 123 4567 in 3 a torch.rand 4,3,28,28 in 4 a 0 shape 理解上相當於取第一張 out 4 torch.size 3,28,28 in 5 a 0,0 shape 第0張的第0個通道 out 5 torch.s...
pytorch索引與切片
目錄 torch會自動從左向右索引 例子 a torch.randn 4,3,28,28 表示類似乙個cnn 的的輸入資料,4表示這個batch一共有4張 而3表示的通道數為3 rgb 28,28 表示的大小 基本索引print a 0 shape torch.size 3,28,28 print ...
Pytorch學習 張量的索引切片
張量的索引切片方式和numpy幾乎是一樣的。切片時支援預設引數和省略號。可以通過索引和切片對部分元素進行修改。此外,對於不規則的切片提取,可以使用torch.index select,torch.masked select,torch.take 如果要通過修改張量的某些元素得到新的張量,可以使用to...