今天在復習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.csdn.net/zxyhhjs2017/article/details/81428220
