彩色图像在numpy中以(h,w,c)的形式存储,而灰度图像则以(h,w)的形式存储,有时为了需求需要为其增加一个值为1的维度,成为(h,w,1),或者将(h,w,1)转换为(h,w)需要减少一个值。
NumPy中数据维度的增加和删除
- 增加一个值为1的维度
img = cv2.imread('D:\\code\\test_python\\img.jpg', cv2.IMREAD_UNCHANGED)
print (img.shape)
alpha = cv2.imread('D:\\code\\test_python\\alpha.jpg', cv2.IMREAD_GRAYSCALE)
print (alpha.shape)
#add dimension method1
mask_add1 = np.expand_dims(alpha, 2)
print (mask_add1.shape)
#add dimension method2
mask_add2 = alpha[:, :, np.newaxis]
print (mask_add2.shape)
#add dimension method3
mask_add3 = np.reshape(alpha, (alpha.shape[0], alpha.shape[1], 1))
print (mask_add3.shape)
- 删除一个值为1的维度
#sum dimension method1
mask_sub1 = np.squeeze(mask_add1)
print (mask_sub1.shape)
#sum dimension method2
mask_sub2 = np.reshape(mask_add2, (mask_add2.shape[0], mask_add2.shape[1]))
print (mask_sub2.shape)
PyTorch中对数据维度进行增加删除的方法
torch.squeeze()
和torch.unsqueenze()
函数可以实现数据维度的增加和删除。
torch.unsqueeze()
数据维度的增加,第二个参数为0数据为行方向增加,为1为列方向维度增加。
a = torch.tensor([1, 2, 3])
b = a.unsqueeze(0)
c = a.unsqueeze(1)
d = a.unsqueeze(-1)
torch.squeenze()
数据维度的减少,第二个参数为0数据为行方向减少,为1为列方向维度减少。
e = b.squeeze(0)
f = c.squeeze(1)
g = d.squeeze(-1)
参考资料