今天在复习PCA的过程中,发现自己对numpy多维数组的“轴”理解的不是很好,借此机会来总结一下。
网上有很多博客都写的是二维数组,axis=0表示第一维度,即行。axis=1表示第二维度,列。但是设计到多维就有点不知所错。
举个网上存在的例子帮助理解:
1 2 3 4 5 6 7 8 9 10 | >> data2 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 ]]]) >> 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)是沿着这个轴计算其他轴的,也就是除了这个轴以外其他轴都会计算
微信
支付宝