看来问题和示例出自Wes McKinney的《Python for Data Analysis》一书。第4.1章中transpose
提到了此功能。转置数组和交换轴。
对于更高维的数组,transpose
将接受轴编号的元组以对轴进行置换(以增加思维的弯曲度)。
这里的“置换”是指“重新排列”,因此要重新排列轴的顺序。
中的数字.transpose(1, 0, 2)
确定与原始轴相比如何更改轴的顺序。通过使用.transpose(1, 0, 2)
,我们的意思是“将第二把斧头改为第二把斧头”。如果使用.transpose(0, 1, 2)
,则数组将保持不变,因为没有任何更改。这是默认顺序。
书中带有(2, 2, 4)
大小数组的示例不是很清楚,因为第一轴和第二轴具有相同的大小。因此,除了对rowarr[0, 1]
和进行重新排序之外,最终结果似乎没有改变arr[1, 0]
。
如果我们尝试使用3维数组(每个维具有不同大小)的不同示例,则重排部分将变得更加清晰。
In [2]: x = np.arange(24).reshape(2, 3, 4)
In [3]: x
Out[3]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
In [4]: x.transpose(1, 0, 2)
Out[4]:
array([[[ 0, 1, 2, 3],
[12, 13, 14, 15]],
[[ 4, 5, 6, 7],
[16, 17, 18, 19]],
[[ 8, 9, 10, 11],
[20, 21, 22, 23]]])
在此,原始数组大小为(2, 3, 4)
。我们更改了第一个和第二个,因此它(3, 2, 4)
的尺寸变大了。如果我们仔细观察,看看重新排列是如何发生的;数字数组似乎已在特定模式下发生了变化。使用@RobertB的书面类比,如果我们要取2个数字块,并将每个数字写在纸上,然后从每张纸取一行,以构造数组的一个维,那么我们现在将得到一个3x2x4大小的数组,从最外层到最内层。
[ 0, 1, 2, 3] \ [12, 13, 14, 15]
[ 4, 5, 6, 7] \ [16, 17, 18, 19]
[ 8, 9, 10, 11] \ [20, 21, 22, 23]
最好使用不同大小的数组,并更改不同的轴以更好地了解其工作原理。