今天在复习PCA的过程中,发现自己对numpy多维数组的“轴”理解的不是很好,借此机会来总结一下。
网上有很多博客都写的是二维数组,axis=0表示第一维度,即行。axis=1表示第二维度,列。但是设计到多维就有点不知所错。
举个网上存在的例子帮助理解:
>> 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的情况:
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)是沿着这个轴计算其他轴的,也就是除了这个轴以外其他轴都会计算
参考链接:https://blog.youkuaiyun.com/zxyhhjs2017/article/details/81428220