ranspose函数主要用来转换矩阵的维度。
首先举个二维矩阵的例子:
首先创建了一个二维的矩阵a,a的shape为(2, 3)即两行三列的意思。
接下来我们使用transpose函数,看看效果:b = a.transpose((1, 0))
首先解释下transpose函数的输入参数(1,0)含义,我们可以理解为一个索引量,原始的索引本来是(0,1),其中的0代表着a的第一个维度即2(shape[0]),其中的1代表的是a的第二个维度即3(shape[1])。现在我们输入参数(1,0)代表着我们要将矩阵a的第一个维度和第二个的维度进行调换。原来的shape为(2,3)现在调换后变成了(3,2)即三行两列。调换的shape确定后我们再将对应的参数填入即可。假设原来的矩阵中的一个元素a(i, j)现在填入b(j,i)中,就是将原来矩阵的元素按照其索引下标进行调换后填入新矩阵中,如下图所示:
a = ([[a(0,0), a(0,1), a(0, 2)],
[a(1,0), a(1,1), a(1,2)]])
b = ([[a(0,0), a(1,0)], b = ([[b(0,0), b(0,1)],
[a(0,1), a(1,1)], [b(1,0), b(1,1)],
[a(0,2), a(1,2)]]) [b(2,0), b(2,1)]])
看完后是不是很像我们学过性代数中的转置,确实,对于二维矩阵可以这么理解,但维度更高就变的很抽象了。下面我们在举个三维矩阵的例子:
我们创建了一个shape为(2,4,3)的三维矩阵c。接下来我们调换矩阵c的一、二维索引。
d = c.transpose((1,0,2)) # 调换一、二维索引,原本索引是(0,1,2)
调换索引前的矩阵c的shape是(2,4,3),调换矩阵c的一、二维索引后得到的d矩阵shape为(4,2,3)。d矩阵的元素值同样是将元素c[i,j,k]填入d[j,i,k]中,即将c矩阵的索引下标的第一维i和第二维j调换位置后填入d中。