对Numpy数组按axis运算的理解

Python的Numpy数组运算中,有时会出现按axis进行运算的情况,如

>>> x = np.array([[1, 1], [2, 2]])
>>> x
array([[1, 1],
       [2, 2]])
>>> x.sum(axis=0)%x.sum(axis=1)

自己初学时,容易搞混axis=0到底代表的是按行运算还是按列运算,而且这仅是针对二维数组情况,更高维数组就无法仅仅用行列来区分了。
经过自己的研究和实践后,谈一下自己的理解,读者如有不赞同的地方,欢迎交流探讨。


numpy数组按axis 运算时,参数axis 代表的是数组的维数序号,如x.sum(axis=0) 代表按第一维(对于二维数组即按列)求和,x.sum(axis=1 代表按第二维(对于二维数组即按行)求和。
这里的第一维、第二维如何去理解?我的理解是看numpy数组中[] 的嵌套关系。第一维就是最外层的[] ,第二维则是次外层的[],高于二维情形依次类推。下面用实际代码说明。

%二维情形
>>> x = np.array([[1, 1], [2, 2]])
>>> x
array([[1, 1],
       [2, 2]])
>>> x.sum(axis=0)   # columns (first dimension)
array([3, 3])
>>> x[:, 0].sum(), x[:, 1].sum()
(3, 3)
>>> x.sum(axis=1)   # rows (second dimension)
array([2, 4])
>>> x[0, :].sum(), x[1, :].sum()
(2, 4)
%三维情形
>>> x=np.arange(1,9).reshape(2,2,2);x
array([[[1, 2],
        [3, 4]],
       [[5, 6],
        [7, 8]]])
>>> x.sum(axis=0) %按第一维求和,把最外层'[]'里面的元素(二维数组)求和
array([[ 6,  8],
       [10, 12]])
>>> x.sum(axis=1) %按第二维求和,把次外层'[]'里面的元素(一维数组)求和
array([[ 4,  6],
       [12, 14]])
>>> x.sum(axis=2) %按第三维求和,把第三层'[]'里面的元素求和
array([[ 3,  7],
       [11, 15]])
>>> x.sum(axis=2)[0,1] %上面矩阵中第一行第二个元素
7
posted @ 2019-02-21 16:32  从入门到出师  阅读(349)  评论(0编辑  收藏  举报