pytorch索引與切片

2022-07-30 12:48:13 字數 2247 閱讀 9007

目錄

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...