Pytorch有關張量的各種操作

一,創建張量

1. 生成float格式的張量:

a = torch.tensor([1,2,3],dtype = torch.float)

2. 生成從1到10,間隔是2的張量:

b = torch.arange(1,10,step = 2)

3. 隨機生成從0.0到6.28的10個張量

注意:
(1).生成的10個張量中包含0.0和6.28(兩端點)
(2).生成的張量步長是隨機的

c = torch.linspace(0.0,2*3.14,10)

4. zeros_like是生成與a格式相同,但是是全0且格式是float的張量

a = torch.ones((3,3),dtype = torch.int)
b = torch.zeros_like(a,dtype = torch.float)

5. 將b中為0或NULL元素替換成5

torch.fill_(b,5)

6. 均勻隨機分布:torch.manual_seed(0)為CPU中設置種子,生成隨機數

torch.manual_seed(0)
minval,maxval = 0,10
a = minval + (maxval-minval)*torch.rand([5])

7. 正態分布隨機

均值means是一個張量,包含每個輸出元素相關的正態分布的均值。
std是一個張量,包含每個輸出元素相關的正態分布的標準差。
均值和標準差的形狀不須匹配,但每個張量的元素個數須相同。

b = torch.normal(mean = torch.zeros(3,3), std = torch.ones(3,3))

8. 正態分布隨機

mean,std = 2,5
c = std*torch.randn((3,3))+mean

9. 整數隨機排列

d = torch.randperm(20) 

10. 生成特殊矩陣

I = torch.eye(3,3) #單位矩陣
t = torch.diag(torch.tensor([1,2,3])) #對角矩陣

二,索引切片

張量的索引切片方式和numpy幾乎是一樣的。切片時支持缺省參數和省略號。

1.切片第1行至第3行

print(t[1:4,:])

2.切片第1行至最后一行,第0列到最后一列每隔兩列取一列

print(t[1:4,:4:2])

3.可以使用索引和切片修改部分元素

x = torch.tensor([[1,2],[3,4]],dtype = torch.float32,requires_grad=True)
x.data[1,:] = torch.tensor([0.0,0.0])

4.對于不規則的切片提取

可以使用torch.index_select, torch.take, torch.gather, torch.masked_select.

  1. 抽取每個班級第0個學生,第5個學生,第9個學生的全部成績
torch.index_select(scores,dim = 1,index = torch.tensor([0,5,9]))
  1. 抽取每個班級第0個學生,第5個學生,第9個學生的第1門課程,第3門課程,第6門課程成績
q = torch.index_select(torch.index_select(scores,dim = 1,index = torch.tensor([0,5,9])),dim=2,index = torch.tensor([1,3,6]))
  1. 抽取第0個班級第0個學生的第0門課程,第2個班級的第4個學生的第1門課程,第3個班級的第9個學生第6門課程成績
    take將輸入看成一維數組,輸出和index同形狀
s = torch.take(scores,torch.tensor([0*10*7+0,2*10*7+4*7+1,3*10*7+9*7+6]))   #感覺跟數組序列號一樣
  1. 抽取分數大于等于80分的分數(布爾索引),結果是1維張量
g = torch.masked_select(scores,scores>=80)

5.通過修改張量的部分元素值得到新的張量

torch.where可以理解為if的張量版本。
torch.index_fill的選取元素邏輯和torch.index_select相同。
torch.masked_fill的選取元素邏輯和torch.masked_select相同。

  1. 如果分數大于60分,賦值成1,否則賦值成0
ifpass = torch.where(scores>60,torch.tensor(1),torch.tensor(0))
  1. 將每個班級第0個學生,第5個學生,第9個學生的全部成績賦值成滿分
torch.index_fill(scores,dim = 1,index = torch.tensor([0,5,9]),value = 100)
#等價于 scores.index_fill(dim = 1,index = torch.tensor([0,5,9]),value = 100)
  1. 將分數小于60分的分數賦值成60分
b = torch.masked_fill(scores,scores<60,60)
#等價于b = scores.masked_fill(scores<60,60)

三,維度變換相關函數

維度變換相關函數主要有 torch.reshape(或者調用張量的view方法),torch.squeeze,torch.unsqueeze, torch.transpose
torch.reshape 可以改變張量的形狀。
torch.squeeze 可以減少維度。
torch.unsqueeze 可以增加維度。
torch.transpose 可以交換維度。

1. 改成 (3,6)形狀的張量

b = a.view([3,6]) #torch.reshape(a,[3,6])

2. 改回成 [1,3,3,2] 形狀的張量

c = torch.reshape(b,[1,3,3,2]) # b.view([1,3,3,2])

3. torch.squeeze消除維度。

如果張量在某個維度上只有一個元素,利用torch.squeeze可以消除這個維度。

s = torch.squeeze(a)

4. torch.unsqueeze

torch.unsqueeze的作用和torch.squeeze的作用相反,增加維度。

#在第0維插入長度為1的一個維度
d = torch.unsqueeze(s,axis=0)

5.轉換成 Pytorch默認的圖片格式

torch.transpose可以交換張量的維度,torch.transpose常用于圖片存儲格式的變換上。
如果是二維的矩陣,通常會調用矩陣的轉置方法 matrix.t(),等價于 torch.transpose(matrix,0,1)。

# 轉換成 Pytorch默認的圖片格式 Batch,Channel,Height,Width
# 需要交換兩次
data_t = torch.transpose(torch.transpose(data,1,2),1,3)print(matrix.t()) #等價于torch.transpose(matrix,0,1)

四,合并分割

可以用torch.cat方法和torch.stack方法將多個張量合并,可以用torch.split方法把一個張量分割成多個張量。

1.torch.cat和torch.stack

torch.cat和torch.stack有略微的區別,torch.cat是連接,不會增加維度,而torch.stack是堆疊,會增加維度。

abc_cat = torch.cat([a,b,c],dim = 0)
abc_stack = torch.stack([a,b,c],axis = 0)
#torch中dim和axis參數名可以混用,=0時是按照行連接,=1列連接
torch.cat([a,b,c],axis = 1)

2.torch.split

torch.split是torch.cat的逆運算,可以指定分割份數平均分割,也可以通過指定每份的記錄數量進行分割。

a,b,c = torch.split(abc_cat,split_size_or_sections = 2,dim = 0) #每份2個進行分割
p,q,r = torch.split(abc_cat,split_size_or_sections =[4,1,1],dim = 0) #每份分別為[4,1,1]

五,張量數學計算

1.取整

print(torch.round(x)) #保留整數部分,四舍五入
print(torch.floor(x)) #保留整數部分,向下歸整
print(torch.ceil(x))  #保留整數部分,向上歸整
print(torch.trunc(x)) #保留整數部分,向0歸整

2.除法余數

print(torch.fmod(x,2)) #作除法取余數
print(torch.remainder(x,2)) #作除法取剩余的部分,結果恒正

3.幅值裁剪

x = torch.tensor([0.9,-0.8,100.0,-20.0,0.7])
y = torch.clamp(x,min=-1,max = 1)
z = torch.clamp(x,max = 1)

4.累乘,標準差,方差,中位數

print(torch.prod(a)) #累乘
print(torch.std(a))  #標準差
print(torch.var(a))  #方差
print(torch.median(a)) #中位數

5.張量排序

torch.sort和torch.topk可以對張量排序

print(torch.topk(a,2,dim = 1),"\n") #沿給定dim維度返回輸入張量input中 k 個最大值。
print(torch.sort(a,dim = 1),"\n")

六,矩陣運算

1.矩陣乘法

print(a@b)  #等價于torch.matmul(a,b) 或 torch.mm(a,b)

2.矩陣轉置

print(a.t())

3.矩陣逆,必須為浮點類型

print(torch.inverse(a))

4.矩陣求trace

print(torch.trace(a))

5.矩陣求范數

print(torch.norm(a))

6.矩陣行列式

print(torch.det(a))

7.矩陣特征值和特征向量

print(torch.eig(a,eigenvectors=True))

8.矩陣QR分解

矩陣QR分解, 將一個方陣分解為一個正交矩陣q和上三角矩陣r
QR分解實際上是對矩陣a實施Schmidt正交化得到q

q,r = torch.qr(a)
print(q@r)#還原a

9.矩陣svd分解

svd分解可以將任意一個矩陣分解為一個正交矩陣u,一個對角陣s和一個正交矩陣v.t()的乘積
svd常用于矩陣壓縮和降維

u,s,v = torch.svd(a)
print(u@torch.diag(s)@v.t())    #還原a

七,廣播機制

torch.broadcast_tensors

torch.broadcast_tensors可以將多個張量根據廣播規則轉換成相同的維度。

a_broad,b_broad = torch.broadcast_tensors(a,b)  #轉換成相同的維度

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

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

相關文章

mongodb安裝失敗與解決方法(附安裝教程)

安裝mongodb遇到的一些坑 浪費了大量的時間 在此記錄一下 主要是電腦系統win10企業版自帶的防火墻 當然還有其他的一些坑 一般的問題在第6步驟都可以解決&#xff0c;本教程的安裝步驟不夠詳細的話 請自行百度或谷歌 安裝教程很多 我是基于node.js使用mongodb結合Robo 3T數…

【洛谷算法題】P1046-[NOIP2005 普及組] 陶陶摘蘋果【入門2分支結構】Java題解

&#x1f468;?&#x1f4bb;博客主頁&#xff1a;花無缺 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! 本文由 花無缺 原創 收錄于專欄 【洛谷算法題】 文章目錄 【洛谷算法題】P1046-[NOIP2005 普及組] 陶陶摘蘋果【入門2分支結構】Java題解&#x1f30f;題目…

web性能優化(理論)

什么是性能優化&#xff1f; 就是讓用戶感覺你的網站加載速度很快。。。哈哈哈。 分析 讓我們來分析一下從用戶按下回車鍵到網站呈現出來經歷了哪些和前端相關的過程。 緩存 首先看本地是否有緩存&#xff0c;如果有符合使用條件的緩存則不需要向服務器發送請求了。DNS查詢建立…

python多項式回歸_如何在Python中實現多項式回歸模型

python多項式回歸Let’s start with an example. We want to predict the Price of a home based on the Area and Age. The function below was used to generate Home Prices and we can pretend this is “real-world data” and our “job” is to create a model which wi…

充分利用UC berkeleys數據科學專業

By Kyra Wong and Kendall Kikkawa黃凱拉(Kyra Wong)和菊川健多 ( Kendall Kikkawa) 什么是“數據科學”&#xff1f; (What is ‘Data Science’?) Data collection, an important aspect of “data science”, is not a new idea. Before the tech boom, every industry al…

文本二叉樹折半查詢及其截取值

using System;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Collections;using System.IO;namespace CS_ScanSample1{ /// <summary> /// Logic 的摘要說明。 /// </summary> …

nn.functional 和 nn.Module入門講解

本文來自《20天吃透Pytorch》 一&#xff0c;nn.functional 和 nn.Module 前面我們介紹了Pytorch的張量的結構操作和數學運算中的一些常用API。 利用這些張量的API我們可以構建出神經網絡相關的組件(如激活函數&#xff0c;模型層&#xff0c;損失函數)。 Pytorch和神經網絡…

10.30PMP試題每日一題

SC>0&#xff0c;CPI<1&#xff0c;說明項目截止到當前&#xff1a;A、進度超前&#xff0c;成本超值B、進度落后&#xff0c;成本結余C、進度超前&#xff0c;成本結余D、無法判斷 答案將于明天和新題一起揭曉&#xff01; 10.29試題答案&#xff1a;A轉載于:https://bl…

02-web框架

1 while True:print(server is waiting...)conn, addr server.accept()data conn.recv(1024) print(data:, data)# 1.得到請求的url路徑# ------------dict/obj d["path":"/login"]# d.get(”path“)# 按著http請求協議解析數據# 專注于web業…

ai驅動數據安全治理_AI驅動的Web數據收集解決方案的新起點

ai驅動數據安全治理Data gathering consists of many time-consuming and complex activities. These include proxy management, data parsing, infrastructure management, overcoming fingerprinting anti-measures, rendering JavaScript-heavy websites at scale, and muc…

從Text文本中讀值插入到數據庫中

/// <summary> /// 轉換數據&#xff0c;從Text文本中導入到數據庫中 /// </summary> private void ChangeTextToDb() { if(File.Exists("Storage Card/Zyk.txt")) { try { this.RecNum.Visibletrue; SqlCeCommand sqlCreateTable…

Dataset和DataLoader構建數據通道

重點在第二部分的構建數據通道和第三部分的加載數據集 Pytorch通常使用Dataset和DataLoader這兩個工具類來構建數據管道。 Dataset定義了數據集的內容&#xff0c;它相當于一個類似列表的數據結構&#xff0c;具有確定的長度&#xff0c;能夠用索引獲取數據集中的元素。 而D…

鐵拳nat映射_鐵拳如何重塑我的數據可視化設計流程

鐵拳nat映射It’s been a full year since I’ve become an independent data visualization designer. When I first started, projects that came to me didn’t relate to my interests or skills. Over the past eight months, it’s become very clear to me that when cl…

Django2 Web 實戰03-文件上傳

作者&#xff1a;Hubery 時間&#xff1a;2018.10.31 接上文&#xff1a;接上文&#xff1a;Django2 Web 實戰02-用戶注冊登錄退出 視頻是一種可視化媒介&#xff0c;因此視頻數據庫至少應該存儲圖像。讓用戶上傳文件是個很大的隱患&#xff0c;因此接下來會討論這倆話題&#…

BZOJ.2738.矩陣乘法(整體二分 二維樹狀數組)

題目鏈接 BZOJ洛谷 整體二分。把求序列第K小的樹狀數組改成二維樹狀數組就行了。 初始答案區間有點大&#xff0c;離散化一下。 因為這題是一開始給點&#xff0c;之后詢問&#xff0c;so可以先處理該區間值在l~mid的修改&#xff0c;再處理詢問。即二分標準可以直接用點的標號…

從數據庫里讀值往TEXT文本里寫

/// <summary> /// 把預定內容導入到Text文檔 /// </summary> private void ChangeDbToText() { this.RecNum.Visibletrue; //建立文件&#xff0c;并打開 string oneLine ""; string filename "Storage Card/YD" DateTime.Now.…

DengAI —如何應對數據科學競賽? (EDA)

了解機器學習 (Understanding ML) This article is based on my entry into DengAI competition on the DrivenData platform. I’ve managed to score within 0.2% (14/9069 as on 02 Jun 2020). Some of the ideas presented here are strictly designed for competitions li…

Pytorch模型層簡單介紹

模型層layers 深度學習模型一般由各種模型層組合而成。 torch.nn中內置了非常豐富的各種模型層。它們都屬于nn.Module的子類&#xff0c;具備參數管理功能。 例如&#xff1a; nn.Linear, nn.Flatten, nn.Dropout, nn.BatchNorm2d nn.Conv2d,nn.AvgPool2d,nn.Conv1d,nn.Co…

有效溝通的技能有哪些_如何有效地展示您的數據科學或軟件工程技能

有效溝通的技能有哪些What is the most important thing to do after you got your skills to be a data scientist? It has to be to show off your skills. Otherwise, there is no use of your skills. If you want to get a job or freelance or start a start-up, you ha…

java.net.SocketException: Software caused connection abort: socket write erro

場景&#xff1a;接口測試 編輯器&#xff1a;eclipse 版本&#xff1a;Version: 2018-09 (4.9.0) testng版本&#xff1a;TestNG version 6.14.0 執行testng.xml時報錯信息&#xff1a; 出現此報錯原因之一&#xff1a;網上有人說是testng版本與eclipse版本不一致造成的&#…