a.numel() 元素的个数
a[::3,::2] 每三行 每两列选一个数据
# 跟李沐学AI 数据操作数据处理
import torch
a = torch.arange(12)
a.numel()
a[::3,::2]
对张量进行拼接
b = torch.tensor([[1.0,2,3,9],[1.0,2,3,9],[1.0,2,3,9]])
torch.cat((a,b),dim = 0) # 表示在第一个维度 也就是行
torch.cat((a,b),dim = 1)
利用广播机制对不同shape的张量进行相加
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
a,b
a + b # 广播机制
原地操作 如果后续操作没有使用到z 可以z[:]或 z += a减少操作的内存开销
before = id(a)
before # 🆔id是内存的十进制表示
a = a + b
before == id (a)
z = torch.zeros_like(a)
print(id(z))
z[:] = a
print(id(z)) # 原地操作 如果后续操作没有使用到z 可以z[:]或 z += a减少操作的内存开销
张量、numpy、标量之间的转化
# 转化为numpy
a = a.numpy()
b = torch.tensor(a)
type(a),type(b)
a = torch.tensor([3.6])
a, a.item(),float(a),int(a) # 这里把张量转化为了python标量
深拷贝与浅拷贝
c[:] = 1 # 选取所有
c = a.clone() # 使用clone分配新的内存 深拷贝
# 浅拷贝
b = a.reshape(3,2)
b[:] = 2 # 改变 b 以后 a 也变了 a.b 指向同一个地址
id(b)
哈德玛积与点积
# 两个矩阵按元素相乘成为哈达码积
a = torch.arange(20).reshape(4,5)
b = a.clone()
a*b
torch.dot(x,y) # 点积是相同位置的元素成积的和
# 点积可以表示为 哈的码积之后元素求和
torch.sum(x*y)
矩阵与矩阵、向量的乘积 (向量是不区分行还是列)
torch.mv(a,b) # 矩阵 向量 积
torch.mm(a,c) # 矩阵与矩阵的乘积
范数
# 范数 L2
u = torch.tensor([3.0,4.0])
# 范数 L1 向量元素绝对值之和
torch.abs(u).sum()
# 矩阵的F范数 矩阵元素平方和的平方根
torch.norm(torch.ones(5,5))