Skip to the content.

numpy.swapaxes 交换矩阵的轴,旋转维度


Contact me:

Blog -> https://cugtyt.github.io/blog/index
Email -> cugtyt@qq.com
GitHub -> Cugtyt@GitHub


对于矩阵操作有时候需要旋转维度,二维转置直接.T较为简单,如果是高维的话,需要借助numpy.swapaxes函数。

>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.shape
(2, 3)

# 注意:python的维度是从0开始的,也就是二维是0维和1维
# a.swapaxes(0, 1) 等价于 np.swapaxes(a, 0, 1)
>>> a.swapaxes(0, 1)
array([[1, 4],
       [2, 5],
       [3, 6]])
>>> a.swapaxes(0, 1).shape
(3, 2)
# 由于是二维矩阵,可以使用.T操作
>>> a.T.shape
(3, 2)

下面使用的numpy.tile(官方文档)函数可以看另一篇博客numpy.tile 示例

# 高维示例
>>> c = np.tile(a, (2, 4, 2))
>>> c
array([[[1, 2, 3, 1, 2, 3],
        [4, 5, 6, 4, 5, 6],
        [1, 2, 3, 1, 2, 3],
        [4, 5, 6, 4, 5, 6],
        [1, 2, 3, 1, 2, 3],
        [4, 5, 6, 4, 5, 6],
        [1, 2, 3, 1, 2, 3],
        [4, 5, 6, 4, 5, 6]],

       [[1, 2, 3, 1, 2, 3],
        [4, 5, 6, 4, 5, 6],
        [1, 2, 3, 1, 2, 3],
        [4, 5, 6, 4, 5, 6],
        [1, 2, 3, 1, 2, 3],
        [4, 5, 6, 4, 5, 6],
        [1, 2, 3, 1, 2, 3],
        [4, 5, 6, 4, 5, 6]]])
>>> c.shape
(2, 8, 6)
>>> c.swapaxes(0, 1)
array([[[1, 2, 3, 1, 2, 3],
        [1, 2, 3, 1, 2, 3]],

       [[4, 5, 6, 4, 5, 6],
        [4, 5, 6, 4, 5, 6]],

       [[1, 2, 3, 1, 2, 3],
        [1, 2, 3, 1, 2, 3]],

       [[4, 5, 6, 4, 5, 6],
        [4, 5, 6, 4, 5, 6]],

       [[1, 2, 3, 1, 2, 3],
        [1, 2, 3, 1, 2, 3]],

       [[4, 5, 6, 4, 5, 6],
        [4, 5, 6, 4, 5, 6]],

       [[1, 2, 3, 1, 2, 3],
        [1, 2, 3, 1, 2, 3]],

       [[4, 5, 6, 4, 5, 6],
        [4, 5, 6, 4, 5, 6]]])
>>> c.swapaxes(0, 1).shape
(8, 2, 6)
# 可以看到0维和1维进行了交换