张量Tensor
各种数值数据都可以称之为张量。
- 0阶张量:标量、常数(scaler) 0-D Tensor
- 1阶张量:向量(vector) 1-D Tensor
- 2阶张量:矩阵(matrix) 2-D Tensor
- ……
- n阶张量
Tensor创建
import torch
import numpy as np
#列表创建tensor
t1=torch.Tensor([1,2,3])
#numpy创建tensor
t2=torch.tensor(np.array([[1,2],[3,4]]))
#由numpy创建tensor
t3=torch.from_numpy(np.array([[1,2],[3,4]]))
#torch的api创建
torch.empty(3,4) #创建三行四列全为空的tensor,用无数据进行填充
torch.ones([3,4]) #创建三行四列全为1的tensor
torch.zeros([3,4]) #创建三行四列全为0的tensor
torch.rand([3,4]) #创建三行四列随机值的tensor,随机值区间为[0,1)
torch.randint(low=0,high=10,size=[3,4]) 创建三行四列的区间为[0,10)的随机!整!数矩阵
torch.randn([3,4]) 创建三行四列,均值为0方差为1的随机数矩阵
张量的方法和属性
- 获取tensor中的数据(当tensor中只有一个数据可用时):tensor.item()
- 转化成numpy数组:tensor.numpy()
- 由numpy数组转换成tensor:torch.from_numpy()
- 获取形状:tensor.size()或 tensor.shape
- 改变形状:tensor.view((m,n)) 不改变原来的值
tensor.reshape() 不改变原来的值 - 获取维度:tensor.dim()
- 获取特殊值:tensor.max() tensor.min() tensor.std() tensor.mean() 等
- 转置:tensor.t()
tensor.transpose(0,1) 序列为0的维度和序列为1的维度进行转置
tensor.permute(0,1,2,……) tensor有n维便要填入n个参数,对改变的维度转换
同样不改变原值 - 取值:tensor[dim1,dim2,……]
- 赋值:tensor[dim1,dim2,……]=a 赋值为a
Tensor的数据类型
- 获取数据类型:tensor.dtype
- 创建tensor时,指定其数据类型:t1=torch.tensor([1,2,3],dtype=torch.float32)
- 类型的转换:tensor.int() tensor.float()等
- torch.Tensor和torch.tensor区别:
全局默认数据类型为 :tensor.float32
torch.Tensor(),向其中传入数据创建tensor,效果同torch.FloatTensor()
torch.tensor()中,可以指定数据类型
Torch的其他操作
x=torch.ones([5,3],dtype=torch.float32)
y=torch.rand(5,3)
#tensor和tensor相加(加减乘除)
x+y
torch.add(x,y)
x.add(y) #这三种方法不会修改x和y的值
x.add_(y) #会对x就地修改,相当于x=x+y 类似方法加_都是就地修改
#tensor和数字操作(加减乘除)
x+10
#CUDA中的tensor
torch.cuda.is_available() 可以检查是否支持CUDA
device=torch.device("cuda" if torch.cuda.is_available() else "cpu") #建立device对象
a=torch.zeros([2,3])
a.to(device) #转换到device对象上