目錄
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索引與切片
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...
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學習 張量的索引切片
張量的索引切片方式和numpy幾乎是一樣的。切片時支援預設引數和省略號。可以通過索引和切片對部分元素進行修改。此外,對於不規則的切片提取,可以使用torch.index select,torch.masked select,torch.take 如果要通過修改張量的某些元素得到新的張量,可以使用to...