python中cat,stac,transpose,permute,squeeze区别用法
**
1 Cat
**
對數據沿著某一維度進行拼接。cat后數據的總維數不變.
比如下面代碼對兩個2維tensor(分別為23,13)進行拼接,拼接完后變為3*3還是2維的tensor。
import torch
torch.manual_seed(1)
x = torch.randn(2,3)
y = torch.randn(1,3)
print(x,y)
結果:
0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
[torch.FloatTensor of size 2x3]
-1.5228 0.3817 -1.0276
[torch.FloatTensor of size 1x3]
將兩個tensor拼在一起:
torch.cat((x,y),0)
結果:
0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
-1.5228 0.3817 -1.0276
[torch.FloatTensor of size 3x3]
2 stack,增加新的維度進行堆疊
而stack則會增加新的維度。
如對兩個12維的tensor在第0個維度上stack,則會變為212的tensor;在第1個維度上stack,則會變為12*2的tensor。
見代碼:
a=torch.rand((1,2))
b=torch.rand((1,2))
c=torch.stack((a,b),0)
c.size()
結果:
torch.Size([2, 1, 2])
換成維度1:
d=torch.stack((a,b),1)
d.size()
結果:
torch.Size([1, 2, 2])
3 transpose ,交換維度
代碼:
torch.manual_seed(1)
x = torch.randn(2,3)
print(x)
結果:
0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
[torch.FloatTensor of size 2x3]
將x的維度互換:
x.transpose(0,1)
結果:
0.6614 0.6213
0.2669 -0.4519
0.0617 -0.1661
[torch.FloatTensor of size 3x2]
**
4 permute,適合多維數據,更靈活的transpose
**
permute是更靈活的transpose,可以靈活的對原數據的維度進行調換,而數據本身不變。
代碼如下:
x = torch.randn(2,3,4)
print(x.size())
x_p = x.permute(1,0,2) # 將原來第1維變為0維,同理,0→1,2→2 print(x_p.size())
結果:
torch.Size([2, 3, 4])
torch.Size([3, 2, 4])
**
5 squeeze 和 unsqueeze
**
squeeze(dim_n)壓縮,即去掉元素數量為1的dim_n維度。同理unsqueeze(dim_n),增加dim_n維度,元素數量為1。
上代碼:
定義張量
import torch
b = torch.Tensor(2,1)
b.shape
Out[28]: torch.Size([2, 1])
不加參數,去掉所有為元素個數為1的維度
b_ = b.squeeze()
b_.shape
Out[30]: torch.Size([2])
加上參數,去掉第一維的元素為1,不起作用,因為第一維有2個元素
b_ = b.squeeze(0)
b_.shape
Out[32]: torch.Size([2, 1])
這樣就可以了
b_ = b.squeeze(1)
b_.shape
Out[34]: torch.Size([2])
增加一個維度
b_ = b.unsqueeze(2)
b_.shape
Out[36]: torch.Size([2, 1, 1])
**
6 view
**
torch.Tensor.view會將原有數據重新分配為一個新的張量,比如我們使用:
x = torch.randn(2, 4)
會輸出一個隨機張量:
1.5600 -1.6180 -2.0366 2.7115
0.8415 -1.0103 -0.4793 1.5734
[torch.FloatTensor of size 2x4]
然后我們看一下使用view重新構造一個Tensor
y = x.view(4,2)
print y
輸出如下
1.5600 -1.6180
-2.0366 2.7115
0.8415 -1.0103
-0.4793 1.5734
[torch.FloatTensor of size 4x2]
從這里我們可以看出來他的作用,既然這樣,我們可以將他變成一個三維數組:
z = x.view(2,2,2)
輸出
(0 ,.,.) =
1.5600 -1.6180
-2.0366 2.7115
(1 ,.,.) =
0.8415 -1.0103
-0.4793 1.5734
[torch.FloatTensor of size 2x2x2]
總結
以上是生活随笔為你收集整理的python中cat,stac,transpose,permute,squeeze区别用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双摄像头立体成像(二)-摄像头标定
- 下一篇: 缠论指标通达信