numpy中的axis

459 阅读2分钟


转载https://zhuanlan.zhihu.com/p/35704955

numpy数组中的轴不太容易理解,但是却非常重要。官方定义为:轴即维度(In Numpy dimensions are called axes.)。

对于二维数组,0轴即代表数组的行,1轴代表数组的列,对二维数组:

arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> arr1
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

其轴0、1如下图所示:

>>> arr1.sum(axis=0)
array([12, 15, 18])
>>> arr1.sum(axis=1)
array([ 6, 15, 24])

对于三位数组

array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

数组arr3条轴,编号分别为0、1、2,要直接看出来这三条轴分别对应什么方向有点困难。最好的办法就是先将三维数组降维成一个二维数组,这样就可以获得原数组的0轴、1轴。怎么降呢?把最内层数组作为一个整体来看待,即有:

A = [0, 1, 2, 3]
B = [4, 5, 6, 7]
C = [ 8,  9, 10, 11]
D = [12, 13, 14, 15]
arr = [[A, B],
       [C, D]]
>>> arr.sum(axis=0)
array([[ 8, 10, 12, 14],
       [16, 18, 20, 22]])
# arr.sum(axis=1) = [A + B, C + D]
>>> arr.sum(axis=1)
array([[ 4,  6,  8, 10],
       [20, 22, 24, 26]])
arr.sum(axis=2)
array([[ 6, 22],
       [38, 54]])


如果一个多维数组的 shape 是 (a1, a2, a3, a4), 那么延轴0计算最后的数组shape 是 (a2, a3, a4), 延轴1计算最后的数组shape是 (a1, a3, a4)

对于多维数组,numpy对轴的编号是先行后列,由外向内!最外面的括号代表着 axis=0,依次往里的括号对应的 axis 的计数就依次加 1,所以,第三个轴(轴2)即为最内层数组的行方向

np.sum 这种函数中的参数 keepdims,它的默认值是 False,此时它会把多余的括号给删掉。假如我们把它设为 True 的话,表示保持原来的维度.

下面是参考文献2中同学整理的图。

参考

flat2010.github.io/2017/05/31/…
Numpy数组解惑 | 断鸿声里,立尽斜阳Numpy数组解惑 | 断鸿声里,立尽斜阳​flat2010.github.io
射命丸咲:Python · numpy · axis​zhuanlan.zhihu.com图标