pytorch索引與切片

2021-10-24 03:39:39 字數 2712 閱讀 8538

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