Pytorch矩阵操作基本都能用以下方法(组合)实现
1 . 改变形状
1.1 Reshape
A= torch.zeros((2, 4)) #形状为2*4
A = A.reshape(2,2,2) #形状变为2*2*2
1.2 View
与Reashape功能相同
A= torch.zeros((2, 4)) #形状为2*4
A = A.View(2,2,2) #形状变为2*2*2
2 .维度变换
2.1 维度交换
A= torch.zeros((2, 4)) #形状为2*4
A = A.permute(1,0) #形状变为4*2,第一维度与第二维度交换位置
2.2 维度压缩/解压
A= torch.zeros((2, 4)) #形状为2*4
A = A..unsqueeze(-1) #形状变为2*4*1,在最后面增加一个维度
A = torch.squeezw(A) #形状变为2*4,维度大小为1的被压缩
2.3 同一维度下指定位置交换
A= torch.tensor([1, 3, 5],[2, 4, 6]) #形状为2*3
A = A[[1,0],:] #形状为2*3,第一行与第二行交换位置
3 .矩阵求和
3.1 爱因斯坦求和
对指定维度求和
A= torch.zeros((2, 4)) #形状为2*4
B= torch.zeros((2, 4)) #形状为2*4
sum = torch.einsum("bs,bs->b",A,B) #形状为2,第二个维度做内积求和操作
4 .矩阵拼接
4.1 水平拼接
A= torch.zeros((2, 4)) #形状为2*4
B= torch.zeros((2, 4)) #形状为2*4
C= torch.vstack((a, b)) #形状为4*4
4.2 横向拼接
A= torch.zeros((2, 4)) #形状为2*4
B= torch.zeros((2, 4)) #形状为2*4
C= torch.hstack((a, b)) #形状为2*8
4 .图像矩阵操作
4.1 图像下采样
opencv中有函数可以调用来对图像进行下采样操作,
如果用python的话,用一行代码就能搞定。
img_down = img[::2, ::2, :]
这行代码的意思是对img图片的行和列分别缩小1/2
两个冒号加个数字的原身是[start:en d:step],start表示索引的起始位置,end表示结束位置,step表示步长,这里没写就默认是全部
当然,这样写也有缺点,比如
- 当行列为奇数时
- 下采样之后的图像边缘会产生锯齿状导致图像失真
4.2 BGR to RGB
用opencv读取图片是反常的BGR格式,想转为RGB还得调用它的函数bgr2rgb,下面提供一个方法
img=img[:,:,::-1]