numpy中多維陣列的軸 axis
阿新 • • 發佈:2018-11-08
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
多維陣列的軸(axis=)是和該陣列的size(或者shape)的元素是相對應的;
>>> np.random.seed(123 )>>> X = np.random.randint(0, 5, [3, 2, 2])>>> print(X)[[[5 2] [4 2]] [[1 3] [2 3]] [[1 1] [0 1]]]>>> X.sum(axis=0)array([[7, 6], [6, 6]])>>> X.sum(axis=1)array([[9, 4], [3, 6], [1, 2]] )>>> X.sum(axis=2)array([[7, 6], [4, 5], [2, 1]])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
如果將三維陣列的每一個二維看做一個平面(plane,X[0, :, :], X[1, :, :], X[2, :, :]),三維陣列即是這些二維平面層疊(stacked)出來的結果。則(axis=0)表示全部平面上的對應位置,(axis=1),每一個平面的每一列,(axis=2),每一個平面的每一行。
考察多維陣列的dot運算
numpy.dot(a, b, out=None)
- 1
For 2-D arrays it is equivalent to matrix multiplication,
兩個二維陣列的dot運算遵循矩陣乘法(其實一個二維一個一維也是矩陣乘法(Ax的每一列;
>>> X.dot([1, 1])array([[7, 6], [4, 5], [2, 1]]) # X的最後一軸是每一個二維的行方向
- 1
- 2
- 3
- 4
- 5
此時如果我們想通過矩陣與向量(一維)內積的方式實現(np.sum(X, axis=0)的結果)需使用np.tensordots(X, [1, 1, 1], axes=([0], [0])),具體的用法見 np.tensordots文件。
>>> np.tensordots(X, [1, 1, 1], axes=([0], [0]))array([[7, 6], [6, 6]])
- 1
- 2
- 3
- 4
我們再來看看如何實現多維陣列求平均的動作(每一個二維平面對應位的平均):
>>> X = np.random.randint(0, 5, [3, 2, 2])>>> Xarray([[[3, 4], [2, 2]], [[3, 4], [2, 3]], [[2, 1], [1, 3]]])>>> np.tensordot(X, [1/3, 1/3, 1/3], axes=([0], [0]))array([[ 2.66666667, 3. ], [ 1.66666667, 2.66666667]])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15