今天在复习PCA的过程中,发现自己对numpy多维数组的“轴”理解的不是很好,借此机会来总结一下。
网上有很多博客都写的是二维数组,axis=0表示第一维度,即行。axis=1表示第二维度,列。但是设计到多维就有点不知所错。
举个网上存在的例子帮助理解:
1 2 3 4 5 6 7 8 9 10 | >> data2array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])>> data2.shape(2L, 3L, 4L) |
下面是不同axis的情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | data2.sum(axis=0)Out[49]:array([[12, 14, 16, 18], [20, 22, 24, 26], [28, 30, 32, 34]]) data2.sum(axis=1)Out[51]:array([[12, 15, 18, 21], [48, 51, 54, 57]]) data2.sum(axis=2)Out[52]:array([[ 6, 22, 38], [54, 70, 86]]) |

这里红色是axis=0的相加情况,黄色是axis=1,蓝色axis=2
所以如果一个多维数组的 shape 是 (a1, a2, a3, a4), 那么延轴0计算最后的数组shape 是 (a2, a3, a4), 延轴1计算最后的数组shape是 (a1, a3, a4)。
axis =0还是代表shape0,只不过axis=0的一些计算如,np.sum(axis=0)是沿着这个轴计算其他轴的,也就是除了这个轴以外其他轴都会计算
微信
支付宝