[pytorch]常用函數(自用)

一、公共部分

1、torch.linespace

返回一維張量,在start和end之間(包括start也包括end)的均勻間隔的steps個點,長度為steps。

print(torch.linspace(1,10,3))  #輸出tensor([ 1.0000,  5.5000, 10.0000])
print(torch.linspace(-10,10,10))  #tensor([-10.0000,  -7.7778,  -5.5556,  -3.3333,  -1.1111,   1.1111,   3.3333, 5.5556,   7.7778,  10.0000])

2、torch.from_array(ndarray)->Tensor

返回的張量和ndarray共享一片存儲區域,修改一個會導致另一個的修改。返回的張量不能改變大小

a=np.array([[1,2,3],[4,5,6]])
b=torch.from_numpy(a)
print(b)#輸出tensor([[1, 2, 3],#[4, 5, 6]], dtype=torch.int32)
b[0][0]=11
print(a)#輸出[[11  2  3] #[ 4  5  6]]

3、torch.numel(input)->int

返回tensor中元素的總個數

a=torch.rand(1,2,3,4)
print(torch.numel(a))#輸出24

4、torch.logspace(start,end,steps,out=None)

生成10的start次方和10的end次方的steps個數據點

print(torch.logspace(-10,10,10))#輸出tensor([1.0000e-10, 1.6681e-08, 2.7826e-06, 4.6416e-04, 7.7426e-02, 1.2915e+01,#2.1544e+03, 3.5938e+05, 5.9948e+07, 1.0000e+10])

5、torch.rand(*size)

生成均值為0,方差為1的高斯分布數據

print(torch.randn((2,3)))

6、torch.randn(*size)

生成均值為0,方差為1的高斯分布數據

print(torch.randn((2,3)))

7、torch.arange(start,end,step=1,out=None)

返回一維張量,在[start,end)之間
torch.range(start,end,step=1,out=None)沒什么區別,只不過數據包含end

print(torch.arange(1,89,9))#輸出tensor([ 1, 10, 19, 28, 37, 46, 55, 64, 73, 82])

二、索引 切片 連接 換位

2.1 torch.cat(tensors,dim=0,out=None)

第?個參數tensors是你想要連接的若?個張量,按你所傳?的順序進?連接,注意每?個張量需要形狀相同,或者更準確的說,進??連接的張量要求列數相同,進?列連接的張量要求?數相同

第?個參數dim表?維度,dim=0則表?按?連接,dim=1表?按列連接

a=torch.tensor([[1,2,3,4],[1,2,3,4]])
b=torch.tensor([[1,2,3,4,5],[1,2,3,4,5]])
print(torch.cat((a,b),1))

#輸出結果為:

tensor([[1, 2, 3, 4, 1, 2, 3, 4, 5],

[1, 2, 3, 4, 1, 2, 3, 4, 5]])

2.2 torch.chunk(tensor,chunks,dim=0)

torch.cat()函數是把各個tensor連接起來,這?的torch.chunk()的作?是把?個tensor均勻分割成若?個?tensor

源碼定義:torch.chunk(intput,chunks,dim=0)

第?個參數input是你想要分割的tensor

第?個參數chunks是你想均勻分割的份數,如果該tensor在你要進?分割的維度上的size不能被chunks整除,則最后?份會略?(也可能為空)

第三個參數表?分割維度,dim=0按?分割,dim=1表?按列分割

該函數返回由?tensor組成的list

c=torch.tensor([[1,4,7,9,11],[2,5,8,9,13]])
print(torch.chunk(c,3,1))

#輸出結果為:

(tensor([[1, 4],

[2, 5]]), tensor([[7, 9],

[8, 9]]), tensor([[11],

[13]]))

2.3 torch.gather(input,dim,index,out=None)

靈活的選取index指定的位置的值進行聚合
注意:
1.index必須是一個張量,不能是普通數組
2.index的形狀和input的形狀可以不相同
3.index的值作為位置的索引
4.選取值的規則如下:
out[i][j][k] = tensor[index[i][j][k]][j][k] # dim=0
out[i][j][k] = tensor[i][index[i][j][k]][k] # dim=1
out[i][j][k] = tensor[i][j][index[i][j][k]] # dim=3

torch.set_printoptions(precision=2)
a=torch.rand(2,3)
aa=torch.gather(a,1,index=torch.LongTensor([[0,1,2],[2,1,1]]))
print("a=",a)
print("aa=",aa)

每個位置的輸出結果是:
[0,0] [0,1] [0,2]
[1,2] [1,1] [1,1]
在這里插入圖片描述
注:輸出的形狀和index一致

說明:如果還存在歧義請參考鏈接:https://www.cnblogs.com/yanghailin/p/18007025

2.4 torch.index_select(input, dim, index)

torch.set_printoptions(precision=2)
# 選取第0行和第3行
a=torch.rand(4,6)
aa=torch.index_select(a,dim=0,index=torch.LongTensor([0,3]))
print('a=',a)
print('aa=',aa)
# 選取第1列和第5列
aaa=torch.index_select(a,dim=1,index=torch.LongTensor([1,5]))
print('aaa=',aaa)
# 選取a的第0行第3行、第1列和第5列,沒有先后順序
aaaa=torch.index_select(aa,dim=1,index=torch.LongTensor([1,5]))
print('aaaa=',aaaa)

2.5 torch.masked_select(input,mask)

a=torch.rand(2,3)
mask1=torch.BoolTensor([[1,0,1],[0,1,0]])
mask2=torch.ByteTensor([[True,False,True],[False,True,False]])
mask3=torch.BoolTensor([[True,False,True],[False,True,False]])
#[[True,False,True],[False,True,False]]
aa=torch.masked_select(a,mask3)
print('a=',a)
print('aa=',aa)

2.6 torch.nonzero(input)

返回非0元素的位置索引
如果輸入是n維,那么輸出的tensor形狀是z*n的,z是輸入中所有非0元素的總個數

a=torch.tensor([[[1,0,3],[0,0,9]],[[1,2,0],[0,9,0]]])
aa=torch.nonzero(a)
print('a=',a)
print('aa=',aa)

2.7 torch.split(tensor,split_size,dim)

split_size是切分成的單個塊的大小,和chunk不同的是chunk指定的是分塊的個數的數量,相同點是它們返回的都是元組,兩個效果類似

a=torch.rand(2,3)
aa=torch.split(a,2,dim=1)
print('a=',a)
print('aa=',aa)

2.8 torch.squeeze(input,dim=None)

將形狀中為1的維度去除,比如輸入的形狀是(A1BCD1E)那么輸出的形狀是(ABCDE)
就指定維度,也只對1的形狀有效,如果指定的維度長度不為1,則無效,原樣輸出

a=torch.rand(2,3,1)
aa=torch.squeeze(a)
print('a=',a.size())
print('aa=',aa.size())
aaa=torch.squeeze(a,dim=1)
print('aaa=',aaa.size())

注意:
雖然squeeze前后squeeze后的維度不一致,但是數據量(數據元素的個數)是一致的,并且它們共享一片存儲區域,當修改其中一個值時,另一個也會跟著修改。

2.9 torch.stack(sequence,dim=0)-堆疊函數

將序列中包含的張量按照指定維度連接,所有張量的形狀應該相同,否則會報錯。增加新維度,不是在原有基礎上疊加
如兩個(2,3)進行stack得到的不會是(4,3),而是(2,2,3)

a=torch.rand(2,3)
b=torch.rand(2,3)
ab=torch.stack((a,b),dim=0)
print('a=',a)
print('b=',b)
print('ab_size=',ab.size())
print('ab=',ab)

2.10 torch.transpose(input,dim0,dim1)-轉置函數

1)交換維度

a=torch.rand(2,3,4)
print('a_size:',a.size())
aa=torch.transpose(a,2,1)
print('aa_size:',aa.size())

2) 共享內存

2.11 torch.unbind(tensor,dim)-解除維度

(2,3,4)->(1,3,4)+(1,3,4)的元組dim=0時
(2,3,4)->(2,1,4)+(2,14)+(2,1,4)的元組dim=1時

a=torch.rand(2,3,4)
aa=torch.unbind(a,1)
print(aa)
print(aa[1].size())

返回的是元組

2.12 torch.unsqueeze(tensor,dim)

1)squeeze的反操作,在dim指定的位置增加一個長度為1的維度(abcd)->(a1bc*d)若dim=1
2)共享內存

a=torch.rand(2,3,4)
aa=torch.unsqueeze(a,2)
print(aa.size())

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45160.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45160.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45160.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

文本分類--NLP-AI(八)

文本分類任務 任務簡介1.字符數值化方式1方式2 2.池化(pooling)3.全連接層4.歸一化函數(Sigmoid)5.總結 從任務抽象新的技術點Embedding層池化層 任務簡介 任務介紹: 字符串分類,根據一句話的含媽量&#…

伊利25屆校招24年社招網申入職北森測評題庫全攻略!一文通!

伊利校招社招網申測評全攻略🚀 親愛的求職小伙伴們,今天我要分享一份伊利校招社招網申測評的全攻略,希望能助你們一臂之力! 測評概覽 伊利的網申測評分為六個部分,總共約60分鐘的答題時間,涵蓋了言語邏輯、…

避免 WebSocket 連接被拒絕

一、檢查服務器配置和權限 (一)確認服務器訪問權限 確保您的客戶端有訪問服務器的合法權限。如果服務器設置了訪問控制列表(ACL)或僅允許特定的源(Origin)進行連接,您需要確保客戶端的請求來源在允許的范圍內。例如,如果服務器只允許來自特定域名的連接,而您的客戶端從…

【微信小程序開發】如何定義公共的js函數,其它頁面可以調用

在微信小程序開發中,可以通過以下步驟定義和使用公共的 JS 函數,使得其它頁面可以調用: 1. 創建一個公共的 JS 文件:在項目的 utils 目錄下創建一個 JS 文件,例如 utils/util.js。 2. 定義公共函數:在 uti…

在word中刪除endnote參考文獻之間的空行

如圖,在References中,每個文獻之間都有空行。不建議手動刪除。打開Endnote。 打開style manager 刪除layout中的換行符。保存,在word中更新參考文獻即可。

Python和C++全球導航衛星系統和機器人姿態觸覺感知二分圖算法

🎯要點 🎯馬爾可夫隨機場網格推理學習 | 🎯二維伊辛模型四連網格模型推理 | 🎯統計物理學模型擾動與最大乘積二值反卷積 | 🎯受限玻爾茲曼機擾動和最大乘積采樣 | 🎯視覺概率生成模型測試圖像 &#x1f3…

從課本上面開始學習的51單片機究竟有什么特點,在現在的市場上還有應用嗎?

引言 51單片機,作為一種經典的微控制器,被廣泛應用于各種嵌入式系統中。盡管如今ARM架構的高性能低成本單片機在市場上占據主導地位,但51單片機憑借其獨特的優勢依然在某些領域保持著應用價值。本文將深入探討51單片機的特點、架構、應用以及…

ubuntu22.04 安裝boost

下載boost壓縮包,我這里上傳了一份1_81_0版本tar -xzvf boost_1_81_0.tar.gzcd boost_1_81_0/sudo apt install build-essential g autotools-dev libicu-dev libbz2-dev -ysudo ./bootstrap.sh --prefix/usr/./b2sudo ./b2 install 上述7步完成后,相關…

數學建模·模糊評價法

模糊評價法 一種解決評價問題或者得出最佳方案的方法 主觀性仍比較強 具體定義 三集:因素集,評語集和權重集,通過模擬矩陣的處理得到最合理的評語 具體步驟 因素集 因素集的確定不難,難在對分級評價時,對因素集的分級…

LeetCode --- 134雙周賽

題目 3206. 交替組 I 3207. 與敵人戰斗后的最大分數 3208. 交替組 II 3209. 子數組按位與值為 K 的數目 一、交替組 I & II 題目中問環形數組中交替組的長度為3的子數組個數,主要的問題在于它是環形的,我們要考慮首尾相接的情況,如何…

阿里新開源GPU版本的FunASR安裝避坑

#當前安裝過程沒有cpu版本順利 1.個人在自己的電腦上安裝ubantu系統,以便使用本身的顯卡功能(本人顯卡NVIDIA GeForce RTX 4060)(這里需要注意,更新里面有附加驅動安裝驅動會導致黑屏,小伙伴不要心急重裝系統,可以ctr…

ES索引模板

在Elasticsearch中,索引模板(Index Templates)是用來預定義新創建索引的設置和映射的一種機制。當你創建了一個索引模板,它會包含一系列的默認設置和映射規則,這些規則會在滿足一定條件的新索引被創建時自動應用。 索…

UOS查看系統信息命令行

UOS查看系統信息命令行 *** Rz整理 僅供參考 *** dmidecode查看System Boot信息 midecode -t 32 dmidecode查看System Reset信息 midecode -t 23 dmidecode查看機箱信息 midecode -t chassis dmidecode查看BIOS信息 midecode -t bios dmidecode查看CPU信息 dmidecode …

leetcode 404. 左葉子之和

給定二叉樹的根節點 root ,返回所有左葉子之和。 示例 1: 輸入: root [3,9,20,null,null,15,7] 輸出: 24 解釋: 在這個二叉樹中,有兩個左葉子,分別是 9 和 15,所以返回 24示例 2: 輸入: root [1] 輸出: 0提示: 節點…

Linux 下使用Docker安裝redis

redis: 是一個高性能的,鍵值對的,將數據存儲到內存中的非關系型數據庫(nosql數據庫 not only sql) 高性能:數據存在內存中,直接訪問內存 鍵值對:新聞id(鍵&#xff09…

c++數據結構--構造無向圖(算法6.1),深度和廣度遍歷

實驗內容: 實現教材算法6.2利用鄰接矩陣構造無向圖的算法,提供從鄰接矩陣獲得鄰接表的功能,在此基礎上進行深度優先遍歷和廣度優先遍歷。 實驗步驟: (1)按照實驗要求編寫代碼,構造無向圖。 ?…

淺談數學模型在UGC/AIGC游戲數值調參中的應用(AI智能體)

淺談數學模型在UGC/AIGC游戲數值調參中的應用 ygluu 盧益貴 關鍵詞:UGC、AIGC、AI智能體、大模型、數學模型、游戲數值調參、游戲策劃 一、前言 在策劃大大群提出《游戲工廠:AI(AIGC/ChatGPT)與流程式游戲開發》討論之后就已完…

Hi3861 OpenHarmony嵌入式應用入門--HTTPD

httpd 是 Apache HTTP Server 的守護進程名稱,Apache HTTP Server 是一種廣泛使用的開源網頁服務器軟件。 本項目是從LwIP中抽取的HTTP服務器代碼; Hi3861 SDK中已經包含了一份預編譯的lwip,但沒有開啟HTTP服務器功能(靜態庫無法…

NiFi1.25版本HTTPS模式下RestAPI使用入門

Apache NiFi 是一個強大的數據流處理工具,通過其 REST API,用戶可以遠程管理和控制數據流處理器。本文將介紹如何使用 NiFi 1.25 版本HTTPS 模式下Rest API,包括獲取 token、獲取組件信息、啟動和停止組件、以及更改組件的調度頻率等操作。 …

Linux vim文本編輯器

Vim(Vi IMproved)是一個高度可配置的文本編輯器,它是Vi編輯器的增強版本,廣泛用于程序開發和系統管理。Vim不僅保留了Vi的所有功能,還增加了許多新特性,使其更加強大和靈活。 Vim操作模式 普通模式&#xf…