Numpy中转置transpose、T和swapaxes

本文详细介绍了如何使用Numpy库进行数组的转置transpose和轴对换swapaxes操作,并通过实例展示了这些操作的具体效果及原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用Python进行数据分析时,Numpy是最常用的库,经常用来对数组、矩阵等进行转置等,有时候用来做数据的存储。

在numpy中,转置transpose和轴对换是很基本的操作,下面分别详细讲述一下,以免自己忘记。

In [1]: import numpy as np

In [2]: arr=np.arange(16).reshape(2,2,4)

In [3]: arr
Out[3]:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
如上图所示,将0-15放在一个2 2 4 的矩阵当中,得到结果如上。

现在要进行装置transpose操作,比如

In [4]: arr.transpose(1,0,2)
Out[4]:
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])
结果是如何得到的呢?

每一个元素都分析一下,0位置在[0,0,0],转置为[1,0,2],相当于把原来位置在[0,1,2]的转置到[1,0,2],对0来说,位置转置后为[0,0,0],同理,对1 [0,0,1]来说,转置后为[0,0,1],同理我们写出所有如下:

其中第一列是值,第二列是转置前位置,第三列是转置后,看到转置后位置,再看如上的结果,是不是就豁然开朗了?

0  [0,0,0] [0,0,0]
1  [0,0,1] [0,0,1]
2  [0,0,2] [0,0,2]
3  [0,0,3] [0,0,3]
4  [0,1,0] [1,0,0]
5  [0,1,1] [1,0,1]
6  [0,1,2] [1,0,2]
7  [0,1,3] [1,0,3]
8  [1,0,0] [0,1,0]
9  [1,0,1] [0,1,1]
10 [1,0,2] [0,1,2]
11 [1,0,3] [0,1,3]
12 [1,1,0] [1,1,0]
13 [1,1,1] [1,1,1]
14 [1,1,2] [1,1,2]
15 [1,1,3] [1,1,3]
再看另一个结果:

In [20]: arr.T
Out[20]:
array([[[ 0,  8],
        [ 4, 12]],

       [[ 1,  9],
        [ 5, 13]],

       [[ 2, 10],
        [ 6, 14]],

       [[ 3, 11],
        [ 7, 15]]])

In [21]: arr.transpose(2,1,0)
Out[21]:
array([[[ 0,  8],
        [ 4, 12]],

       [[ 1,  9],
        [ 5, 13]],

       [[ 2, 10],
        [ 6, 14]],

       [[ 3, 11],
        [ 7, 15]]])
再对比转置前后的图看一下:

0  [0,0,0] [0,0,0]
1  [0,0,1] [1,0,0]
2  [0,0,2] [2,0,0]
3  [0,0,3] [3,0,0]
4  [0,1,0] [0,1,0]
5  [0,1,1] [1,1,0]
6  [0,1,2] [2,1,0]
7  [0,1,3] [3,1,0]
8  [1,0,0] [0,0,1]
9  [1,0,1] [1,0,1]
10 [1,0,2] [2,0,1]
11 [1,0,3] [3,0,1]
12 [1,1,0] [0,1,1]
13 [1,1,1] [1,1,1]
14 [1,1,2] [2,1,1]
15 [1,1,3] [3,1,1]
瞬间就明白转置了吧!其实只要动手写写,都很容易明白的。另外T其实就是把顺序全部颠倒过来,如下:

In [22]: arr3=np.arange(16).reshape(2,2,2,2)

In [23]: arr3
Out[23]:
array([[[[ 0,  1],
         [ 2,  3]],

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


       [[[ 8,  9],
         [10, 11]],

        [[12, 13],
         [14, 15]]]])

In [24]: arr3.T
Out[24]:
array([[[[ 0,  8],
         [ 4, 12]],

        [[ 2, 10],
         [ 6, 14]]],


       [[[ 1,  9],
         [ 5, 13]],

        [[ 3, 11],
         [ 7, 15]]]])

In [25]: arr3.transpose(3,2,1,0)
Out[25]:
array([[[[ 0,  8],
         [ 4, 12]],

        [[ 2, 10],
         [ 6, 14]]],


       [[[ 1,  9],
         [ 5, 13]],

        [[ 3, 11],
         [ 7, 15]]]])

转置就是这样子,具体上面aar3转置前后的位置,就不写了。

下面说说swapaxes,轴对称。

话不多,上结果

In [27]: arr.swapaxes(1,2)
Out[27]:
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])

In [28]: arr.transpose(0,2,1)
Out[28]:
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])
发现了吧,其实swapaxes其实就是把矩阵中某两个轴对换一下,不信再看一个:

In [29]: arr3
Out[29]:
array([[[[ 0,  1],
         [ 2,  3]],

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


       [[[ 8,  9],
         [10, 11]],

        [[12, 13],
         [14, 15]]]])

In [30]: arr3.swapaxes(1,3)
Out[30]:
array([[[[ 0,  4],
         [ 2,  6]],

        [[ 1,  5],
         [ 3,  7]]],


       [[[ 8, 12],
         [10, 14]],

        [[ 9, 13],
         [11, 15]]]])

In [31]: arr3.transpose(0,3,2,1)
Out[31]:
array([[[[ 0,  4],
         [ 2,  6]],

        [[ 1,  5],
         [ 3,  7]]],


       [[[ 8, 12],
         [10, 14]],

        [[ 9, 13],
         [11, 15]]]])
哈哈,只要动手做做,会发现其实没有那么困难,不能只看

纸上得来终觉浅,绝知此事要躬行!共勉







### Numpy `transpose` 函数详解 #### 1. 基本概念 Numpy 的 `transpose` 函数用于改变数组的轴顺序,从而实现矩阵转的效果。对于二维数组而言,这相当于行列互换;而对于多维数组,则可以重新排列各个维度的位。 #### 2. API 接口说明 函数签名如下所示: ```python numpy.transpose(a, axes=None) ``` 参数解释: - `a`: 输入数组。 - `axes`: 可选参数,默认为 None。如果提供此参数,则按照给定的新轴序来重排数据;如果不给出该参数,则默认反转所有轴的方向[^3]。 返回值是一个视图对象,表示原数组经过变换后的版本。 #### 3. 示例代码展示 ##### 例子一:简单二阶张量(即矩阵)转 ```python import numpy as np A = np.array([[1, 2], [3, 4]]) print("Original matrix:\n", A) B = np.transpose(A) print("\nTransposed matrix using transpose():\n", B) ``` 输出结果将是原始矩阵与其转形式之间的对比显示。 ##### 例子二:三维数组沿特定轴方向进行转操作 考虑一个形状为 `(2, 3, 4)` 的三维数组 X ,现在希望将其第二第三两个轴位调换得到新的数组 Y 。可以通过下面的方式完成这一目标: ```python X = np.random.rand(2, 3, 4) Y = X.transpose((0, 2, 1)) print('Shape of original array:', X.shape) print('Shape after transposing axis 1 and 2:', Y.shape) ``` 这段程序会打印出转换前后数组的具体尺寸信息[^4]。 #### 4. 结合 reshape 进行复杂的数据重组 有时候不仅需要调整轴的顺序还需要改变某些维度大小,在这种情况下就可以联合使用 `reshape()` `transpose()` 来达到目的。例如先通过 `reshape()` 将高维数据降成低维再做必要的转处理,反之亦然。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值