创建张量
import torch #导入torch类
x=torch.arange(N) #使用arrange创建张量
x.shape #访问张量形状
x.numel() #访问张量元素总数
x.reshape(r,c) #改变张量形状(-1可代替剩余维度)
x=torch.ones((n1,n2,n3…)) #创建全0或全1张量
x=torch.zeros((n1,n2,n3…))
x= randn(n1,n2,n3) #创建随机采样张量(从均值为0,标准差为1的正态分布中采样)
x=torch.tensor([[1,2,3],[4,5,6],[7,8,9]]) #创建自定义张量
dir() #查询方法参数
运算符
x=torch.tensor([])
y=torch.tensor([])
x+y,x-y,x*y,x/y,x**y #按元素运算的加减乘除幂运算
torch.exp(x) #对x进行按元素指数运算
torch.cat((x,y),dim = 0) #沿行连接张量(沿行为字面意思)
torch.cat((x,y),dim = 1) #沿列连接张量(沿列为字面意思)
x==y #暗元素判断并标记bool形成新的张量
x.sum() #对张量中所有元素求和
广播机制(形状不同的张量按元素操作)
a=torch.arange(3).reshape(3,1) #a张量为列向量
b=torch.arange(2).reshape(1,2) #b张量为行向量
a+b #a列向量复制与b列数相同,b行向量复制与a行数相同,再按元素相加
#结果为tensor([[0],[1],[2]])+tensor([[0,1]])=tensor([[0,1],[1,2],[2,3]])
索引和切片
#[]一般内部为元素,[[]]中为某一行元素
#可按索引访问张量元素,顺序号第一个为0,倒序号最后一个为-1,[n:m]为第n+1个但不包含m+1个元素,[n,m]代表第n+1行、m+1列元素
节省内存操作
before=id(Y)
Y=X+Y
id(Y) == before
#结果为False
#计算Y=X+Y时会创建新张量,并为新张量创建新内存,增加了内存消耗
before=id(Y)
Y[:]=X+Y #或Y +=X
id(Y) == before
#结果为True
#使用Y[:]或+=,无需创建新张量,减少了内存消耗
更换张量对象
X=torch.arange(12).reshape(3,4)
A=X.numpy() #更换为numpy张量
B=torch.tensor(A) #更换为torch张量
type(A),type(B) #结果为numpy.ndarray,torch.Tensor
a=torch.tensor([1.4])
a.item() #将大小为1的张量转换为Python标量