今天在復習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