Numpy数组转置详解:transpose、T与swapaxes的使用与原理
本文深入解析Numpy中数组转置的三种方式:transpose函数、T属性及swapaxes轴交换。通过2x2x4及更高维度的具体代码示例,详细展示各元素索引在转置前后的变化规律,帮助开发者理解多维数组内存布局与轴对换机制,掌握高效的数据处理技巧。
Numpy转置操作概述
在进行Python数据分析时,Numpy是最核心的库之一,常用于处理数组和矩阵的转置操作,同时也涉及数据的存储优化。
Numpy中的转置(transpose)和轴对换是基础且重要的操作,为避免混淆,此处将分别详细阐述其用法与原理。
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的数字填充到一个形状为2x2x4的矩阵中,生成结果如下。
接下来演示transpose转置操作,例如指定轴顺序为(1,0,2)。
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],转置后仍为[0,0,0];原位于[0,1,2]的元素转置后坐标变为[1,0,2]。以此类推,对所有元素进行位置映射:
表格第一列为数值,第二列为转置前的坐标,第三列为转置后的坐标。观察转置后的坐标分布,结合上方的矩阵结果,即可清晰理解转置逻辑。
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]
再看另一个示例:
T属性与多维数组转置
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]]]])
这就是T属性的转置效果。对于上述arr3的转置前后坐标变化,此处不再赘述。
下面介绍swapaxes,即轴交换操作。
直接展示运行结果:
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、T属性和swapaxes的实例讲解到此结束,希望能为读者提供参考,欢迎支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









