从重塑开始
In [322]: a = np.arange(18).reshape(2,3,3)In [323]: aOut[323]: array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]]])
显示为2个平面,每个平面为3x3。那部分清楚吗?数组在某一点被整形(9,2)的事实并不重要。重塑不会改变元素的顺序。
应用
swapaxes。形状现在是(3,3,2)。3个平面,每个平面为3x2。这种特殊的交换与移调相同
np.arange(18).reshape(2,3,3).transpose(2,1,0)
中轴不变。仍然有[0,3,6],[9,12,15]等列。
通过3种不同尺寸的轴更直观地看到更改
In [335]: a=np.arange(2*3*4).reshape(2,3,4)In [336]: aOut[336]: 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 [337]: a.swapaxes(0,2)Out[337]: array([[[ 0, 12], [ 4, 16], [ 8, 20]], [[ 1, 13], [ 5, 17], [ 9, 21]], [[ 2, 14], [ 6, 18], [10, 22]], [[ 3, 15], [ 7, 19], [11, 23]]])
注意当我展平数组时会发生什么
In [338]: a.swapaxes(0,2).ravel()Out[338]: array([ 0, 12, 4, 16, 8, 20, 1, 13, 5, 17, 9, 21, 2, 14, 6, 18, 10, 22, 3, 15, 7, 19, 11, 23])
条款的顺序已经改组。创建时为[0,1,2,3 …]。现在
1是第六个学期(2x3)。
在后台,
numpy实际上通过更改和来执行交换或转置
shape,
strides而
order无需更改数据缓冲区(即,它是一个视图)。但是,进一步的重塑(包括穿行)迫使其复制。但是在现阶段,这可能比帮助还令人困惑。
在
numpy轴上编号。诸如x,y,z或平面,行,列之类的术语可以帮助您将其映射到可以可视化的结构上,但它们不是“内置”的。用语言描述交换或转置非常棘手。



