numpy.ndarray.transpose用法理解
numpy.ndarray.transpose方法对于高维数组来讲,略微有点不太好理解。下面给出我自己对该方法的理解。
对于一个高维数组,transpose((i,j,k))可以这样理解:选取原数组的i轴上的数据作为新数组的0轴,选取原数组的j轴上的数据作为新数组的1轴。而0轴可想象为“片”,1轴可想象为“片上的行”,2轴可想象为“片上的列”。
具体操作来讲:
>>>import numpy as np
>>>a=np.arange(16).reshape(2,2,4)
>>>a
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
>>>a.transpose((2,1,0))
array([[[ 0, 8],
[ 4, 12]],
[[ 1, 9],
[ 5, 13]],
[[ 2, 10],
[ 6, 14]],
[[ 3, 11],
[ 7, 15]]])
选取原数组的2轴的数据作为新数组的0轴,比如0,4,8,12
必须在新数组的0轴上,那么到底是[[0,4],[8,12]]
还是[[0,8],[4,12]]
?
再看j=1,即原1轴上的仍然是新的1轴,即新数组的row就是原数组的row,所以4
不能转到1轴,所以是[[0,8],[4,12]]
。
>>>a.transpose((1,2,0))
array([[[ 0, 8],
[ 1, 9],
[ 2, 10],
[ 3, 11]],
[[ 4, 12],
[ 5, 13],
[ 6, 14],
[ 7, 15]]])
选取原数组的1轴的数据作为新数组的0轴,比如0,1,2,3
,8,9,10,11
必须在新数组的0轴上,那么到底是横排还是竖排?
再看j=2,即原数组的2轴变成新数组的1轴,意思就是原来的列就是现在的行,那确定就是竖排。
>>>a.transpose((0,2,1))
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
原来的0轴还是新的0轴,那么横排还是竖排?
j=2,即行变列,竖排。
>>>a.transpose((2,0,1))
array([[[ 0, 4],
[ 8, 12]],
[[ 1, 5],
[ 9, 13]],
[[ 2, 6],
[10, 14]],
[[ 3, 7],
[11, 15]]])
老规矩,先把原数组所有“片”的列拿出来当作新的“片”,那么老问题,竖排还是横排?
j=0,意思就是原“片”中的数据必须是“行”,所以横排。
#####
愿你一寸一寸地攻城略地,一点一点地焕然一新
#####