pytorch學習(一)—Tensor

#Tensor的創建及常用方法
from __future__ import print_function
import torch as t
import numpy as np


#創建一個3*3全1的矩陣
x1 = t.ones(3,3)
print(x1)

#5*5全0矩陣
x2 = t.zeros(5,5)
print(x2)

#與x1同維度的0矩陣
x3 = t.zeros_like(x1)
print(x3)

#與x1同維度全0矩陣
x4 = t.ones_like(x1)
print(x4)

#對角矩陣
x5 = t.diag(t.from_numpy(np.array([1,2,3,4,5])))
print(x5)

#5*5隨機矩陣
x6 = t.rand(5,5)
print(x6)

#5*5 norm分佈矩陣
x7 = t.randn(5,5)
print(x7)

#創建一個empty Tensor
x8 = t.empty(3,3)
print(x8)

#創建一個Tensor,給定數值
x9 = t.Tensor([[1,0,0],[0,1,0],[0,0,1]])
print(x9)

#根據已有的Tensor創建一個新的Tensor
x10 = t.rand_like(x9,dtype=t.float)
print(x10)

#獲取Tensor的size,Tensor.size實際上是一個Tuple
print(x10.size())

###函數名以_結尾的都是inplace方式,即會修改調用者自己的數據###
#Tensor的 in place操作,會改變Tensor本身
x11 = t.rand(3,3)
print(x11.t_())
print(x11.copy_(x10))

#Tensor resize/reshape操作
x12 = t.randn(4,4)
print(x12)
x13 = x12.view(16)
print(x13)
x14 = x13.view(-1,8)
print(x14)

#只有一個數的Tensor,使用xxx.item()得到python數值
x15 = t.rand(1)
print(x15)
print(x15.item())

#獲取Tensor中元素的個數
x16 = t.randn(1,2,3,4,5)
print(x16)
print(t.numel(x16))
print(t.numel(t.zeros(4,5)))

#判斷一個對象是否是Tensor
print(t.is_tensor(x16))
print(t.is_tensor(np.array([1,2,3,4])))

#判斷一個對象是否爲Pytorch storage object
print(t.is_storage(t.empty(3,3)))
print(t.is_storage(np.zeros(shape=(3,3))))

#設置Tensor的數據類型,初始默認值爲torch.float32
print(t.Tensor([1,2,3]).dtype)
t.set_default_dtype(t.float64)
print(t.Tensor([1,2,3]).dtype)

#獲取默認的Tensor數據類型
print(t.get_default_dtype())
t.set_default_dtype(t.float32)
print(t.get_default_dtype()) 

print("*************")

###Tensor常見的操作###
#加減乘除
#矩陣運算
#切片

#pytorch矩陣的操作
var = t.Tensor() #返回一個Tensor
tensor1 = t.Tensor(3,3)
tensor2 = t.Tensor(3,3)

print(tensor1,tensor2)
var2 = t.add(tensor1,tensor2)   #矩陣相加
var3 = t.sub(tensor1,tensor2)   #減
var4 = t.mul(tensor1,tensor2)   #乘
var5 = t.div(tensor1,tensor2)   #矩陣點除
var6 = t.mm(tensor1,tensor2)    #矩陣乘

print(dir(t.Tensor))
print(help(t.tensor))

x17 = t.Tensor(5,3)   #構造一個5*3的Tensor
x18 = t.rand(5,3)   #構造一個隨機初始化的Tensor
print(x17.size())
print(x18.size())
print(x17)
print(x18)

###Tensor相加###
#2個Tensor相加
#方式一
y = t.rand(5,3)
print(y)
var7 = t.add(x17,y)
#方式二
var8 = x18 + y 
#方式三
var9 = t.rand(5,3)
t.add(x17,y,out=var9)
print(var9)

#Tensor相加,y.add_()會改變y的值
y.add_(x18)
print(y)

###Tensor相減###
x19 = t.rand(5,5)
x20 = t.rand(5,5)
y2 = x19 - x20
y3 = t.sub(x19,x20)
print(x19.sub_(x20))

###Tensor相乘###
x21 = t.rand(3,3)
x22 = t.rand(3,3)
y4 = x21 * x22
y5 = t.mul(x21,x22)
print(y5.mul_(x22))

###Tensor相除###
x23 = t.rand(5,5)
x24 = t.rand(5,5)
y6 = x23 / x24
y7 = t.div(x23,x24)
print(x7.div_(x24))

###Tensor矩陣乘###
x25 = t.rand(5,5)
x26 = t.rand(5,5)
y8 = t.mm(x25,x26)
#print(x9.mm_(x26)) #錯誤用法

#矩陣切片###
var10 = x18[:,1]
print(x18)
print(var10)

####Tensor與numpy.ndarray的轉換####
#numpy.adarray表示一個高維的列表/容器。
#在數值計算中numpy.ndarray表示一個高維矩陣
print("################")
x27 = t.Tensor(5,5)

#將Tensor轉換爲numpy的ndarray
var11 = x27.numpy()
print(var11)

#numpy的ndarray轉爲Tensor
x28 = np.ndarray(shape=(5,5),dtype=np.int32)
print(x28)
var12 = t.from_numpy(x28)
print(var12)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章