首先我们构造一个简单的二维矩阵
import numpy as np
data=np.array([[1,2,3],[4,5,6]])
print(data)
Output:
[[1 2 3]
[4 5 6]]
接着我们对生成的这个二维矩阵进行转置:行列互换
dataT=data.T
print(dataT)
Output:
[[1 4]
[2 5]
[3 6]]
可以看出,原本二维矩阵的列成为了新矩阵的行
接下来我们对多维矩阵进行转置操作:
data=np.arange(24).reshape(2,3,4)
print(data)
通过代码我们生成了一个维度为2,3,4的三维矩阵:
Output:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
接下来我们进行一次转置操作:
dataT=data.transpose((1,0,2))
print(dataT)
Output:
[[[ 0 1 2 3]
[12 13 14 15]]
[[ 4 5 6 7]
[16 17 18 19]]
[[ 8 9 10 11]
[20 21 22 23]]]
二维矩阵我们还可以通过输出的不同看出只是行列产生了对换,但是三维矩阵转置后的结果却不太好看出规律了。
其实实质上,矩阵的转置是对矩阵中每个元素的位置进行了对应改变。我们挑选几个元素距离:
原本矩阵中8这个元素位于第一个维度的0下标中,位于第二个维度的2下标,第三个维度的0下标。当我们transpose((1,0,2)),实质是指将矩阵中所有元素的第一维度和第二维度下标互换,第三维度不变。所以矩阵转置8(0,2,0)->8(2,0,0)。可以看到8确实是跑到了一维的第三组,二维的第一组,三维的第一个位置上去。
同理实质上我们的data.T进行的二维矩阵转置等同于是简化的data.transpose(1,0),我们以6为例:6(1,2)->6(2,1)