日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中cat,stac,transpose,permute,squeeze区别用法

發布時間:2023/12/20 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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区别用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。