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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

11_拼接与拆分,cat,stack,split,chunk

發布時間:2024/9/27 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 11_拼接与拆分,cat,stack,split,chunk 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.11.拼接與拆分
1.11.1.cat
1.11.2.Stack
1.11.3.split
1.11.4.chunk

1.11.拼接與拆分

1.11.1.cat

?numpy中使用concat,在pytorch中使用更加簡寫的 cat
?完成一個拼接
?兩個向量維度相同,想要拼接的維度上的值可以不同,但是其它維度上的值必須相同。

舉個例子:還是按照前面的,想將這兩組班級的成績合并起來
a[class 1-4, students, scores]
b[class 5-9, students, scores]

# -*- coding: UTF-8 -*-import torcha = torch.rand(4, 32, 8) b = torch.rand(5, 32, 8)print(torch.cat([a, b], dim=0).shape) """輸出結果:torch.Size([9, 32, 8]) 結果就是9個班級的成績 """

理解cat:
?行拼接:[4, 4] 與 [5, 4] 以 dim=0(行)進行拼接 —> [9, 4] 9個班的成績合起來。
?列拼接:[4, 5] 與 [4, 3] 以 dim=1(列)進行拼接 —> [4, 8] 每個班合成8項成績

理解Cat

# -*- coding: UTF-8 -*-import torcha1 = torch.rand(4, 3, 32, 32) a2 = torch.rand(5, 3, 32, 32) print(torch.cat([a1, a2], dim=0).shape) # 合并第1維 理解上相當于合并batch """ 輸出結果:torch.Size([9, 3, 32, 32]) """a2 = torch.rand(4, 1, 32, 32) print(torch.cat([a1,a2],dim=1).shape) # 合并第2維 理解上相當于合并為 rgba """ 輸出結果:torch.Size([4, 4, 32, 32]) """a1 = torch.rand(4, 3, 16, 32) a2 = torch.rand(4, 3, 16, 32) print(torch.cat([a1, a2], dim=3).shape) # 合并第3維 理解上相當于合并照片的上下兩半 """ 輸出結果:torch.Size([4, 3, 16, 64]) """a1 = torch.rand(4, 3, 32, 32) print(torch.cat([a1, a2], dim=0).shape) """ RuntimeError: Sizes of tensors must match except in dimension 0. Got 32 and 16 in dimension 2 (The offending index is 1) """

1.11.2.Stack

?創造一個新的維度(代表了新的組別)
?要求兩個tensor的size完全相同

# -*- coding: UTF-8 -*-import torcha1 = torch.rand(4, 3, 16, 32) a2 = torch.rand(4, 3, 16, 32) print(torch.cat([a1, a2], dim=2).shape) # 合并照片的上下部分 """ 輸入結果:torch.Size([4, 3, 32, 32]) """# 添加了一個維度 一個值代表上半部分,一個值代表下半部分。 這顯然是沒有cat合適的。 print(torch.stack([a1, a2],dim=2).shape) """ 輸入結果:torch.Size([4, 3, 2, 16, 32]) """a = torch.rand(32, 8) b = torch.rand(32, 8) # 將兩個班級的學生成績合并,添加一個新的維度,這個維度的每個值代表一個班級。顯然是比cat合適的。 print(torch.stack([a,b],dim=0).shape) """ 輸出結果:torch.Size([2, 32, 8]) """

1.11.3.split

?按長度進行拆分:單元長度/數量
?長度相同給一個固定值
?長度不同給一個列表

# -*- coding: UTF-8 -*-import torcha = torch.rand(32, 8) b = torch.rand(32, 8) c = torch.rand(32, 8) d = torch.rand(32, 8) e = torch.rand(32, 8) f = torch.rand(32, 8) s = torch.stack([a, b, c, d, e, f], dim=0) print(s.shape) """ 輸出結果:torch.Size([6, 32, 8]) """ aa,bb = s.split(3, dim=0) # 按數量切分,可以使用一個常數 print(aa.shape, bb.shape) """ 輸出結果:torch.Size([3, 32, 8]) torch.Size([3, 32, 8]) """ cc, dd, ee = s.split([3, 2, 1], dim=0) # 按單位長度切分,可以使用一個列表 print(cc.shape, dd.shape, ee.shape) """ 輸出結果: torch.Size([3, 32, 8]) torch.Size([2, 32, 8]) torch.Size([1, 32, 8]) 看到結果第一列,分別是:3,2,1 """print(s)ff, gg = s.split(6, dim=0) # 只切了一半,有一半不存在,所以報錯 """ ValueError: not enough values to unpack (expected 2, got 1) """

1.11.4.chunk

?按照量進行拆分

# -*- coding: UTF-8 -*-import torcha = torch.rand(32, 8) b = torch.rand(32, 8) c = torch.rand(32, 8) d = torch.rand(32, 8) e = torch.rand(32, 8) f = torch.rand(32, 8) s = torch.stack([a, b, c, d, e, f], dim=0) print(s.shape) """ 輸出結果:torch.Size([6, 32, 8]) """aa, bb = s.chunk(2, dim=0) print(aa.shape, bb.shape) """ 輸出結果:torch.Size([3, 32, 8]) torch.Size([3, 32, 8]) """cc, dd = s.split(3, dim=0) print(cc.shape, dd.shape) """ 輸出結果:torch.Size([3, 32, 8]) torch.Size([3, 32, 8]) """

注意:對于按數量切分:chunk中的參數是要切成幾份;split的常量是每份有幾個。

總結

以上是生活随笔為你收集整理的11_拼接与拆分,cat,stack,split,chunk的全部內容,希望文章能夠幫你解決所遇到的問題。

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