创建tensor矩阵
torch.empty( {num1} , {num2} ) 返回一个 {num1}*{num2} 的矩阵,内容取决于这个内存原来的内容
torch.rand( {num1} , {num2} ) 返回一个 {num1}*{num2} 的矩阵,内容随机
troch.zeros( {num1} , {num2} , dtype = torch.long ) 返回一个 {num1}*{num2} 的矩阵,元素全为0,数据类型为int64,dtype可以省去,默认为float32
torch.new_ones([{num1},{num2}]) 返回一个 {num1}*{num2} 的矩阵,元素全为1
torch.tensor([{num1},{num2}],[{num3},{num4}]) 返回直接构建的矩阵,也可以用已经建成的tensor矩阵作文参数拷贝
torch.rand_like( {tensor} , {dtype} ) 返回与{tensor}形状相同的矩阵,数据类型为{dtype} #rand函数只对float类型使用,若使用int作为dtype则会报错

dtype
dtype是tensor矩阵中元素的数据类型
x.dtype 返回tensor矩阵x的数据类型
官方docs里的dtype类型 :
torch.float or torch.float32
torch.double or torch.float64
torch.half or torch.float16
torch.bfloat16
torch.chalf or torch.complex32
torch.cfloat or torch.complex64
torch.cdouble or torch.complex128
torch.uint8
torch.int8
torch.short or torch.int16
torch.int or torch.int32
torch.long or torch.int64
torch.bool
torch.quint8
torch.qint8
torch.qint32
torch.qint4x2

tensor矩阵运算
x.shape 以元组tuple的形式返回x的矩阵的形状,形如torch.Size([{num1},{num2}])
tensor支持像numpy一样对矩阵进行切片的操作,exp: x[1:,1:]
x.view( {num1} , {num2} ) 返回将x reshape后的tensor矩阵,{num2}必须能被整除,可以缺省但是不能{num1}和{num2}都缺省
x + y 普通加法运算
y.add( x ) in_place加法,把x加到y里面

其他一些常用功能
x.data 返回x的tensor矩阵
x.item (x只有一个元素时)返回x的数值
torch.transpose( x , {num1} , {num2} ) 返回交换x的{num1},{num2}两个维度后的矩阵 查看对于transpose的解读

将numpy ndarray转化为torch tensor
这里用一个exp说明:

a = np.ones(5) #创建a = [1,1,1,1,1]
b = torch.from_numpy(a) #将a转化为torch tensor赋值到b
np.add( a , 1 , out = a ) #给a的每个元素+1
print(a) # [2,2,2,2,2]
b #[2,2,2,2,2]

这里我们发现,将a转化为torch tensor赋值给b是在a的元素+1之前发生的事,但是b的值和a一样
所以b和a是内存共享的

将tensor转移到别的设备上 #前提是别的设备可用,这里用英伟达的GPU做示例
别的设备是否可用可以用 torch.cuda.is_available()来检查,返回值为true则可用
device = torch.device(“cuda”)
x = x.to(device)
读取GPU上的矩阵的时候我们要把矩阵从GPU拿回CPU上
y = torch.ones_like( x , device = device )
z = x + y
print(z) #此时输出失败,因为x和y都在GPU上,所以z也在GPU上
print(z.to( “cpu” , torch.double ) ) #此时输出成功
同理如果我们想使用GPU tensor的data方法的话
x.to(“cpu”).data.numpy()

参考资料:
torch.Tensor官方docs