torch和numpy的各种常用的矩阵matrix操作

前言

在使用深度学习进行图像的目标检测时,会经常使用到矩阵的相关操作,这里记录一下常用的矩阵操作。

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]

你可能感兴趣的:(矩阵,pytorch,深度学习)