N维数组是机器学习和神经网络的主要数据结构
0维:标量,一个类别
1维:向量,[1,2,3],一个特征向量
2维:3行样本*3列特征,一个样本的特征矩阵
3维:RGB图像三个通道(宽x高x通道)
4维:n个3维数组,RGB图像批量(批量大小x宽x高x通道)
5维:视频批量,图片和声音
创建数组
形状如3x4,数据类型如fp32,每个元素的值如全是0或随机数
访问元素
[1, 2] 一个元素
[1, :] 一行
[:, 1] 一列
[1:3, 1:] 第1行2行,从第1列开始到所有列
[::3, ::2] 从第0行开始,每3行一跳,从第0列开始,每2列一跳
数据操作实现
- 赋值
import torch # 导入PyTorch工具包
x = torch.arange(12) # 0到11共12个向量
x.shape() #查看维度,张量
x # 输出x
x.numel() #元素总数,标量
X= x.reshape(3, 4) # 转换成3*4维度
torch.zeros((2, 3, 4)) # 使矩阵内元素全0
torch.ones((2, 3, 4)) # 使矩阵内元素全1
y = torch.tensor([[1.0, 2, 3], [1, 2, 3]]) # 创建二维数组
- 运算
x + y, x - y, x * y # 对元素做运算
torch.exp(x) # 指数运算
X.sum() # 所有元素求和
- 连结多个张量
X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1) # 在第几维拼接
- 按元素判断
X == Y
- 广播机制
a = torch.arange(3).reshape((3, 1)) # 将1复制成2
b = torch.arange(2).reshape((1, 2)) # 将1复制成3
a, b
a + b
- 索引和切片
X[-1] # 访问最后一行
X[1: 3] # 第一行和第二行
X[0:2, :] = 12 # 区域赋值,第零和第一行赋值为12
- 节省内存
before = id(Y) #
Y = Y + X
id(X) == before # 结果False