在图像处理中,有时候需要维度转换,比如对于一些神经网络的输入,我们需要将图像的通道维移到第一维或者最后一维,下面来介绍一下在numpy中如何对矩阵维度进行转换
1.使用numpy.transpose(a, axes=None)
>>>a=np.arange(0,12).reshape(3,2,2)
>>>print(a,a.shape)
[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]]] (3, 2, 2)
第一种使用方式:当只传入a的时候,是对a进行转置
>>>b=np.transpose(a)
>>>print(b,b.shape)
[[[ 0 4 8]
[ 2 6 10]]
[[ 1 5 9]
[ 3 7 11]]] (2, 2, 3)
第二种使用方式:指定交换方式,第二个参数是一个tuple,比如这里的(1,0,2)表示的是将原来的第1维变换到第0维,第0维变换到第1维,第2维变换到第3维;所以里面的数字不能超过维度大小,比如如果矩阵是3维的,那么里面的值只能取0,1,2
>>>c=np.transpose(a,(1, 0, 2))
>>>print(c,c.shape)
[[[ 0 1]
[ 4 5]
[ 8 9]]
[[ 2 3]
[ 6 7]
[10 11]]] (2, 3, 2)
2.使用numpy.swapaxes(a, axis1, axis2);它和transpose的区别是这个函数只能一次交换两个维度,并且不用使用tuple指定,直接作为第二第三个参数传入即可
>>>d=np.swapaxes(a,1,2)
>>>print(d,d.shape)
[[[ 0 2]
[ 1 3]]
[[ 4 6]
[ 5 7]]
[[ 8 10]
[ 9 11]]] (3, 2, 2)