前言
在使用深度学习进行图像的目标检测时,会经常使用到矩阵的相关操作,这里记录一下常用的矩阵操作。
1. 序列排序 : argsort
np.argsort(args)
将args中的数据按照从大到小排序,返回排序的数据所在的序号index
2. 展平 :flatten
x.flatten(n)
将矩阵x展平,默认n为0,也就是将矩阵x展平成一维。当n>0时,表示前n维不变,之后的维度进行展平处理。
比如
import torch
x = torch.rand((3,3,10,10))
b = x.flatten() # size : [900, ]
c = x.flatten(1) # size : [3, 300]
d = x.flatten(2) # size: [3, 3, 100]
自己试一下就清楚了。
3. 增加维度 : unsqueeze
x.unsqueeze(dim=0)
将矩阵x在dim=0维度上增加一个维度。 [3, 3, 100] -->>-- [1, 3, 3, 100]
4. 增加维度 : np.expand_dims(arr, 0)
x = np.expand_dims(x, dim=1)
将X矩阵在dim=1处增加一个维度
4. 减少维度 : squeeze
类似上述方法,在dim=n上删去该维度。
5. 转置,交换两维 :transpose
x.transpose(dim0, dim1)
将矩阵x的dim0和dim1维度交换。 [3, 3, 100] -->>-- [100, 3, 3]
6. 重置形状 : reshape、view
x.reshape(a, b, c, d)
将矩阵x重新设定为指定的形状。
x.view(a,-1,d)
x.view(*shape) 根据x的维数来定义输出的形状,比较灵活,可以表示维度展开和合并。
-1表示第二维是原来原始维度的集合。例如:
[8, 3, 16, 16, 6] -->>-- [8, 31616, 6]
7. 维度换位 : permute
x.permute(2, 3, 0, 1)
将x的维度按照序号排列。维度变化: [12, 3, 64, 64] -->>-- [64, 64, 12, 3]
8. 重复 repeat
将x矩阵按照指定形状重复一定次数,组成一个新的矩阵。
x.repeat(2,4, 3)
x.shape = [3, 64, 64] -->>-- [32, 644, 64*3]
可以理解为将x的不同维度放大一定的倍数。
9. 创建随机矩阵tensor
torch.zeros((a, b, c, d))
torch.ones((a, b, c, d))
torch.randn(a, b, c, d)
torch.zeros_like(tensor)
torch.ones_like(tensor)
b = a[..., 0:2] # 表示取a矩阵的所有维度,在最后一个维度上,只取前两维数据。 a : [3, 16, 16, 4] -->>-- [3, 16, 16, 2]