1、創建tensor數據,隨機數,運算


tensor(張量)是PyTorch的一種數據類型,可以是標量、一維向量、多維矩陣等。

官網已經有介紹,總結如下:

上圖中types可以不同(dtype不設定就是同類型),並沒有嚴格界限,不過最好按推薦的情況去使用。

tensor.*中tensor就是帶有數據的具體對象了,如下述案例中x、y等。

1、Tensor與tensor區別

import torch as t
x=t.Tensor(2,3) #2行3列
x=t.Tensor([2,3]) #浮點型,輸出 tensor([2., 3.])
#tensor里是已存在的數據,標量、向量、矩陣等。注意與Tensor區別
x=t.tensor([2,3])  #與元素同類型,整型
x=t.tensor([2.,3.]) #浮點型

torch.Tensor()是python類,更明確地說,是默認張量類型torch.FloatTensor()的別名,torch.Tensor([1,2])會調用Tensor類的構造函數__init__,生成單精度浮點類型的張量。

torch.tensor()是函數,返回的張量類型與元素同類型

詳解鏈接https://blog.csdn.net/tfcy694/article/details/85338745

2、torch.*

#未初始化的,里面是垃圾值
x=t.empty(2,3)
x
#類似的還有ones
x=t.zeros(2,3,dtype=t.long)
x
#[0,1]均勻分布,randn是高斯分布
x=t.rand(2,3)
x

3、torch.*_like、torch.new_*

#與x等大,類型不同(若設定)
y=t.zeros_like(x,dtype=t.float)
y
#y與x不等大,同類型(若不設定)
y=x.new_zeros(3,2)
#y.type()
#y.size()
y

 注意,如果報錯,一般是因為類型不是Tensor默認的浮點型,轉換下就可以了

其他總結:

import torch as t
a=t.arange(0,5,2) #步長為2的等差數列,左閉右開
b=t.linspace(0,5,3) #指定間隔范圍內返回均勻間隔的數字
c1=t.randn(2,3) #標准正太分布
c2=t.rand(2,3) #0-1的均勻隨機分布
d=t.randperm(3) #長度為3的隨機排列,從0開始
e=t.eye(2,3) #對角線為1的矩陣,行列數可以不一致
print("a",a)
print("b",b)
print("c1",c1)
print("c2",c2)
print("d",d)
print("e",e)

view調整形狀:

a=t.arange(0,6) 
print(a)
b=a.view(2,-1) #調整形狀,-1自動計算列數。注意b與a同一內存
print(b)
c=b.view(1,1,2,-1) #2維變4維
print(c)
c.size()

索引:

a=t.randn(3,4)
a[0] #第1行
a[:,0] #第1列
a[0,2] #第1行3列的元素
a[0,-1] #第1行最后1列的元素
a[:2] #前2行,左閉右開,即0、1行
#都是第1行前2列,但形狀不同
print(a[0,:2])  #1維
print(a[0:1,:2]) #2維,1*2

x=t.arange(0,27).view(3,3,3) #3*3*3
x[[1,2],[1,2],[2,0]] # x[[1,1,2],[2,2,0]]
x[[2,1,0],[0],[1]] #x[[2,0,1],[1,0,1],[0,0,1]]

按條件選取元素

a=t.randn(3,4)
a[a>1] #選取大於1的元素
a[a!=0]

 tensor函數

a=t.arange(0.,6.).view(2,-1) #注意浮點型
t.cos(a) #余弦,整型會報錯
t.fmod(a,3) #取余,a%3
t.pow(a,2) #次冪,a**2
t.clamp(a,min=3) #低於3的置為3
t.clamp(a,min=2,max=4) #低於2的置為2,高於4的置為4
#類似函數還有,abs、sqrt、ceil/round/floor/trunc上取整/四舍五入/下取整/只留整數部分

歸並操作:

mean/sum/median/mode 均值/和/中位數/眾數
norm/dist 范數/距離
std/var 標准差/方差
cumsum/cumprod 累加/累乘

以上函數大多有dim這個參數,dim設置規律如下:

對於形狀(m,n,k),

dim=0,則輸出形狀(1,n,k)或(n,k)

dim=1,則輸出形狀(m,1,k)或(m,k)

dim=2,則輸出形狀(m,n,1)或(m,n)

 有無1,取決於參數keepdim,keepdim=True則保留維度1,默認是False。

b=t.ones(2,3)
print(b.sum(dim=0,keepdim=True)) #1*3,二維
print(b.sum(dim=0)) #3,注意不是1*3,一維
print(b.sum(dim=1)) #對於二維矩陣:dim=0累加列。dim=1累加行。

 矩陣運算:

 注意,轉置會使得內存空間不連續。

a=t.linspace(0,15,6).view(2,-1)
b=a.t()
print(b.is_contiguous()) #轉置后b的內存空間是不連續的
c=b.contiguous() #重新分配新的連續的空間c,b依然是不連續的。
print(b.is_contiguous())
print(c.is_contiguous())

 

其他參考 http://studyai.com/pytorch-1.4/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor-tutorial-py


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM