目录
一、Tensor概述
二、创建Tensor
1、表1 常见的新建tensor方法
2、创建张量的方法
3、torch.Tensor与torch.tensor的几点区别
三、修改Tensor形状
表2 tensor常用修改形状的函数
四、索引操作
表3 常用选择操作函数
五、广播机制
六、逐元素操作
表4 常见逐元素操作
七、归并操作
表5 常见的归并操作
八、比较操作
表6 常用的比较函数
九、矩阵操作
表7 常用矩阵函数
十、Pytorch与Numpy比较
表8 Pytorch与Numpy函数对照表
1、对tensor的操作很多,从接口的角度来划分,可以分为两类:
(1)torch.function,如torch.sum、torch.add等,
(2)tensor.function,如tensor.view、tensor.add等。
2、如果从修改方式的角度,可以分为以下两类:
(1)不修改自身数据,如x.add(y),x的数据不变,返回一个新的tensor。
(2)修改自身数据,如x.add_(y)(运行符带下划线后缀),运算结果存在x中,x被修改。
import torch
x=torch.tensor([1,2])
y=torch.tensor([3,4])
z=x.add(y)
print(z)
print(x)
x.add_(y)
print(x)
运行结果
tensor([4, 6])
tensor([1, 2])
tensor([4, 6])
补充:
torch.full([2,4],2) #根据形状[2,4],填充指定数值2
Tensor(序列) #其中序列可以是列表、元组、array(数组)
①torch.Tensor是torch.empty和torch.tensor之间的一种混合,但是,当传入数据时,torch.Tensor使用全局默认dtype(FloatTensor),torch.tensor从数据中推断数据类型。
②torch.tensor(1)返回一个固定值1,而torch.Tensor(1)返回一个大小为1的张量,它是随机初始化的值。
import torch
import numpy as np
A = np.arange(0, 40,10).reshape(4, 1)
B = np.arange(0, 3)
#把ndarray转换为Tensor
A1=torch.from_numpy(A) #形状为4x1
B1=torch.from_numpy(B) #形状为3
#Tensor自动实现广播
C=A1+B1
#我们可以根据广播机制,手工进行配置
#根据规则1,B1需要向A1看齐,把B变为(1,3)
B2=B1.unsqueeze(0) #B2的形状为1x3
#使用expand函数重复数组,分别的4x3的矩阵
A2=A1.expand(4,3)
B3=B2.expand(4,3)
#然后进行相加,C1与C结果一致
C1=A2+B3
【说明】
这些操作均创建新的tensor,如果需要就地操作,可以使用这些方法的下划线版本,例如abs_。
【说明】
归并操作一般涉及一个dim参数,指定沿哪个维进行归并。另一个参数是keepdim,说明输出结果中是否保留维度1,缺省情况是False,即不保留。
【说明】
①torch的dot与Numpy的dot有点不同,torch中dot对两个为1D张量进行点积运算,Numpy中的dot无此限制。
②mm是对2D的矩阵进行点积,bmm对含batch的3D进行点积运算。
③转置运算会导致存储空间不连续,需要调用contiguous方法转为连续。