【d2l】2.1.数据操作
【d2l】2.1.数据操作
import torch
初始化
序列定义
x = torch.arange(12)
全零张量
torch.zeros(2, 3, 4)
全一张量
torch.ones(2, 3, 4)
随机数
torch.randn(3, 4)
自定义
torch.tensor([[1, 1, 4], [5, 1, 4], [1, 9, 1], [9, 1, 9]])
操作与运算
查看张量形状
x.shape
查看元素总数
x.numel()
重新指定形状(可有-1占位)
X = x.reshape(3, 4)
X = x.reshape(3, -1)
X = x.reshape(-1, 3)
加、减、乘、除、幂次、exp
X + Y
X - Y
X * Y
X / Y
X ** Y
torch.exp(X)
矩阵连接
print(f'竖直连接: \n{torch.cat((X, Y), dim = 0)}')
print(f'横向连接: \n{torch.cat((X, Y), dim = 1)}')
逻辑矩阵
X == Y # 逻辑运算符均可
元素求和
X.sum()
广播机制(不同形状的会强制转换成相同形状进行运算)
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a + b
tensor([[0, 1],
[1, 2],
[2, 3]])
索引与切片
切片的操作与python自身的序列差不多
X[-1] # 最后一行
X[1, 3] # 第二第三行
修改也可以通过下标访问
X[1, 2] = 9 # 单点修改
X[0:2, :] = 12 # 切片修改
内存优化
形如
Y = X + Y
的运算会给Y开辟新空间,有两个处理方式,零张量或是后续无用张量再利用
Z = torch.zeros_like(Y)
Z[:] = X + Y
X += Y
numpy与tensor转化
多元素张量
A = X.numpy()
B = torch.tensor
单元素可以通过.item()或自带库转化
a.item()
float(a)

浙公网安备 33010602011771号