numpy.transpose和swapaxes进行矩阵维度转换(有一定区别)

在图像处理中,有时候需要维度转换,比如对于一些神经网络的输入,我们需要将图像的通道维移到第一维或者最后一维,下面来介绍一下在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)
发布了27 篇原创文章 · 获赞 20 · 访问量 1564

猜你喜欢

转载自blog.csdn.net/qq_39507748/article/details/104444892