数组的转置和轴对称


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]]]

猜你喜欢

转载自blog.csdn.net/Jormungand_V/article/details/109480695