[开发技巧]·Numpy中对axis的理解与应用

[开发技巧]·Numpy中对axis的理解与应用

 

1.问题描述

在使用Numpy时我们经常要对Array进行操作,如果需要针对Array的某一个纬度进行操作时,就会用到axis参数。

一般的教程都是针对二维矩阵操作axis,当axis为0时,计算方向时列,当axis为1时计算方向为行。

但是这样的描述并不能让我们真正理解axis的含义。下面我一个三维Array,来带领大家深入理解axis

2.实战讲解

>>> import numpy as np
>>> arrays = np.arange(0,12).reshape([2,3,2])
>>> arrays
array([[[ 0,  1],
        [ 2,  3],
        [ 4,  5]],

       [[ 6,  7],
        [ 8,  9],
        [10, 11]]])
>>> np.sum(arrays)
66
>>> np.sum(arrays,axis=0)
array([[ 6,  8],
       [10, 12],
       [14, 16]])
>>> np.sum(arrays,axis=1)
array([[ 6,  9],
       [24, 27]])
>>> np.sum(arrays,axis=2)
array([[ 1,  5,  9],
       [13, 17, 21]])

为什么是这个结果呢,笔者来帮大家说梳理一下:

首先我们新建了一个shape(2,3,3)的Array

1.用np.sum(arrays)时,计算的是所有元素的和。

2.用np.sum(arrays,axis = 0)时,我们可以这样理解,以最外面的[ ]为一个list,对里面两个元素(每个元素都是二维Array)进行相加求和,所以得到的Array和相加元素形状相同。

2.用np.sum(arrays,axis = 1)时,以中间的[ ]为一个list,对里面三个元素(每个元素都是一维Array)进行相加求和,所以得到的Array和相加元素形状相同,但是由于有两个中间的[ ],所以把两个拼接在了一起。

3.用np.sum(arrays,axis = 2)时,以最里面的[ ]为一个list,对里面两个元素(每个元素都是一个人说)进行相加求和,所以得到的Array和相加元素形状相同,但是由于有两个中间的[ ],每个中间的[ ]包含三个[ ],最终shape为(2,3)。

类似其实我们在使用下标选取内容时使用相同的概念

>>> import numpy as np
>>> arrays = np.arange(0,12).reshape([2,3,2])
>>> arrays
array([[[ 0,  1],
        [ 2,  3],
        [ 4,  5]],

       [[ 6,  7],
        [ 8,  9],
        [10, 11]]])
>>> arrays[0,:,:]
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> arrays[:,0,:]
array([[0, 1],
       [6, 7]])
>>> arrays[:,:,0]
array([[ 0,  2,  4],
       [ 6,  8, 10]])
>>> 

大家可以根据笔者上面讲述的,好好理解分析一下为什么是这样。

hope this helps

猜你喜欢

转载自www.cnblogs.com/xiaosongshine/p/10719474.html