#学习torch的基本操作
#__future__模块,把下一个新版本的特性导入到当前版本
from __future__ import print_function
import torch
#关于构造张量
####################
'''
#构造5*3空矩阵
x = torch.empty(5,3)
print ('x=',x)
#构造5*3随机矩阵,矩阵元素大小(0,1)
q = torch.rand(5,3)
print ('q=',q)
#构造5*3的0矩阵,限定矩阵元素为长整型
w = torch.zeros(5,3,dtype=torch.long)
print ('w=',w)
print ('w.type=',w.dtype) #输出矩阵元素类型
print ('w.shape=',w.shape) #输出矩阵尺寸
#直接输入数据构造张量
r = torch.tensor([5,2.5])
print (r)
# 基于已存在张量构建新的张量
t = r.new_ones(5,3,dtype=torch.double)
print (r,'\n',t)
t = torch.randn_like(t,dtype=torch.float)
print (t)
print (t.size()) #获得尺寸
#关于张量之间的运算
###################
#加法_1
#相加的矩阵元素类型应该一样,如都是double
t = r.new_ones(5,3,dtype=torch.double)
print (t)
y = torch.rand(5,3,dtype=torch.double)
print (y)
print (t+y)
#加法_2
print (torch.add(t,y))
result = torch.empty(5,3,dtype=torch.double)
torch.add(t,y,out=result)
print (result)
#原位相加
x = torch.rand(5,3,dtype=torch.double)
print (y)
y.add_(x)
print (x)
print (y)
#note:任何原位的操作,都在后面加一个 '_' ,如x.copy_(y), x.t_()等
print (x[:,1])
# 调整张量尺寸
#使用torch.view
a = torch.randn(4,4)
print (
a)
s = a.view(16)
print (s)
d = a.view(-1,8) #-1代表,尺寸调整以列数8为主,
print (d)
print (a.size(),s.size(),d.size())
#对只有一个元素的张量,可以使用 .item() 将其值取出来作为一个数
x = torch.randn(1)
print(x)
print(x.item())
#torch到numpy之间的转换
#torch张量与numpy数组共享同一个存储位置,改变其中一个的值,另一个也会随之变化
a = torch.ones(5,5)
print (a)
b = a.numpy()
print(b)
a.add_(1)
print(a)
print(b)
'''
#numpy到torch之间的转换
import numpy as np
a = np.ones(5)
print(a)
b = torch.from_numpy(a)
print(b)
np.add(a,1,out=a)
print(a)
print(b)