张量(256,256)转换为三维通道图片张量(256,256,3)可以采用下面方法:
1.先将张量转换为数组。
2.在numpy数组增加维数(相当于在张量里增加了通道的维度),即(256,256,1)。
3.增加numpy数组维度中的数量(也就是将张量里的一个通道变为3),即(256,256,3)。
4.根据需要来决定是否调整顺序,如:(3,256,256)
5.最后再进行transforms.Totensor()操作转换成张量。
也可以解决单通道图片转换成三通道图片问题。
1.Tensor转换numpy
x=torch.tensor([[1,2,3],[4,5,6]]) #T大写会显示小数点
print(x)
#结果:
tensor([[1, 2, 3],[4, 5, 6]])
print(x.shape) #torch.Size([2, 3])
#张量x转换数组y
y=x.numpy()
print(y)
#结果:
[[1 2 3][4 5 6]]
print(y.shape) #(2, 3) 和张量完全一样,二维三列的数组,只是数组里无逗号
2.numpy数组增加维数
通过添加一个np.newaxis,在哪个维度添加的则在哪里加中括号来增加维数。
y1=y[np.newaxis,:,:]#在第一个维度(最外层)增加中括号
print(y1)
#结果:
[[[1 2 3][4 5 6]]]
print(y1.shape) #(1, 2, 3)y3=y[:,:,np.newaxis] #在最后一个维度(最里层)增加中括号
print(y)
#结果:
[[[1][2][3]][[4][5][6]]]
print(y3.shape) #(2, 3, 1)
增加numpy数组维度中的数量
通过拼接函数concatenate(数组,axis)达到目的,axis指定在哪个地方拼接,如axis=2则在第二维度(这里是最里层)拼接。
yy = np.concatenate([y3, y3, y3], axis=2)
print(y)
#结果:
[[[1 1 1][2 2 2][3 3 3]][[4 4 4][5 5 5][6 6 6]]]
print(yy.shape) #(2, 3, 3)
交换numpy数组各维度
利用transpose(),参数表示交换后的位置
yy1 = yy.transpose(1, 2, 0)
print(yy1)
#结果:
[[[1 4][1 4][1 4]][[2 5][2 5][2 5]][[3 6][3 6][3 6]]]
print(yy1.shape) #(3, 3, 2)