文章目录
- T属性
- transpose()方法
- swapaxes()方法
T属性
import numpy as np # Numpy工具包data = np.arange(12).reshape(3, 4) # 创建一个3行4列的数组
print(data)# 数组的转置和轴对称
data1 = data.T
print(data1)
print(data)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
print(data1)
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
transpose()方法
二维数组运用 T属性转置较为简单(x->y,y->x),但当操作对象是高维度的数组时,运用transpose()方法可以自由的进行转置(x->y,y->z,z->x || x->z,y->x,z->y),运用transpose时需要得到一个由轴编号组成的元组,才能对这些轴进行转置。
# transpose()方法
arr = np.arange(16).reshape((2, 2, 4)) # 每组2个元素组,总共两组,每个元素组里有4个元素
print(arr)
print(arr.shape)
arr1 = arr.transpose(1, 2, 0) # 变成(2, 4, 2)三维数组,每组4个元素组,总共2组,每个元素组里有2个元素
print(arr1)
注释名称只是为了方便自己理解瞎写的,三维数组还是按x,y,z理解更好理解
三维数组有三个轴,每个轴都对应着一个编号,分别为0、1、2。
由输出可知,arr.shape是(2,2,4),如果希望对arr进行转置操作,就需要对它的shape中的顺序进行调换。也就是说,当使用transpose()方法对数组的shape进行变换时,需要以元组的形式传入shape的编号,比如本例中的(1,2,0)。
ps:若传入(0,1,2),则数组的shape不会发生任何变化
print(arr)
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
为了便于理解贴张图好了
print(arr.shape)
(2,2,4)
print(arr1)
[[[ 0 8]
[ 1 9]
[ 2 10]
[ 3 11]]
[[ 4 12]
[ 5 13]
[ 6 14]
[ 7 15]]]
本例中,由(0,1,2)变为(1,2,0)其实也就是我们说的(x->y,y->z,z->x),什么意思呢?
简单来讲,如果拿第一个元素0来看,不方便解释——以前x0,y0,z0的值等于0,现在x0,y0,z0的值等于0那我们看第二个元素的话,shape为(0,1,2)时,x0,y0,z1的值为1,当shape为(1,2,0)时,x0,y0,z1的值由于(x->y,y->z,z->x)
【->前是(0,1,2)中的坐标,->后是(1,2,0)中的坐标】这样的变换,也就是(1,2,0)的x0是(0,1,2)的y0,(1,2,0)的y0是(0,1,2)的z0,(1,2,0)的z1是(0,1,2)的x1,即——8。以此类推。
如果我们不输入任何参数,直接调用transpose()方法,则其执行的效果等价于transpose(2,1,0)将数组进行转置。
swapaxes()方法
在某些情况下,我们可能只需要转换其中的两个轴,这时我们可以使用此方法,该方法需要接收一对轴编号。
# swapaxes()方法
arr2 = arr.swapaxes(1, 0) # 等价于transpose(1, 0, 2)
print(arr2)
print(arr2)
[[[ 0 1 2 3]
[ 8 9 10 11]]
[[ 4 5 6 7]
[12 13 14 15]]]