Python中的numpy库对数组进行操作是非常方便的,在学习到使用numpy进行数组转置时遇到了一些问题,亲自动手操作后,对这个问题算是能够理解了。
- 1 首先是使用数组对象的T属性,对数组进行转置。简单的一维和二维数组比较好理解,无非就是线性代数中的行列相互交换。对于高维数组的转置看如下具体操作:
import numpy as np
a = np.arange(12).reshape(2, 2, 3)
print(a)
创建一个三维矩阵,由2个2*3的矩阵块组成。
output:
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
其中每个元素都有其唯一的坐标(x,y,z),例如0:【0,0,0】,1:【0,0,1】。。。。11:【1,1,2】。此时对a进行转置看看结果:
print(a.T)
output:
[[[ 0 6]
[ 3 9]]
[[ 1 7]
[ 4 10]]
[[ 2 8]
[ 5 11]]]
a数组变成了3*2*2的了,再看一下各个元素的坐标可以发现0:【0,0,0】,1:【1,0,0】。。。。。11:【2,1,1】,每个元素坐标的x和相互交换了位置。其实该T操作等同于后面两种方法a.transpose(2,1,0)以及a.swapaxes(0,2),具体分析后面来说。
- 2 第二种是使用方法transpose进行轴的交换,你的数组是几维的该方法的参数就有几个,看下面具体操作:
a = np.arange(6).reshape(2, 3)
print(a)
print("--------------------")
print(a.transpose(1, 0))
output:
[[0 1 2]
[3 4 5]]
--------------------
[[0 3]
[1 4]
[2 5]]
对于二维数组a中的每个元素的坐标(x,y),例如0:【0,0】。。。。。5:【1,2】只有两个轴x和y对应着transpose方法中的参数0和1,想要把该二维的a数组转置,只需要使用transpose方法,将默认的参数transpose(0,1)改为transpose(1,0),则进行了转置。对于更高维的数组,无非就是轴的个数增加x,y,z。。。。对应0,1,2。。。。。只需要调换轴对应数字参数的顺序就可以将数组进行轴的变换。
1.1中的三维数组的T转置,其实就是transpose中的x和z轴交换。
- 3 第三种方法是swapaxes方法,法如其名。就是直接进行轴的交换,具体操作如下:
a = np.arange(6).reshape(2, 3)
print(a)
print("--------------------")
print(a.transpose(1, 0))
print("--------------------")
print(a.swapaxes(0, 1))
output:
[[0 1 2]
[3 4 5]]
--------------------
[[0 3]
[1 4]
[2 5]]
--------------------
[[0 3]
[1 4]
[2 5]]
直接使用swapaxes方法调换二维数组a的0和1轴,达到的效果和transpose方法一样,transpose方法的参数意义理解后,该方法也是一样理解的。
补充:该三种方法都是返回了源数据的视图,并没有任何复制操作。