1. 引言
一般人刚接触数组的时候,为了方便记忆,将axis=0规定行,将axis=1规定为列,但这只是对于二维数组来说,可以快速理清结构的一种方式;但对于多维数组呢?若axis=2,3…应该如何去理解呢?axis=2可勉强理解为空间上的z轴,或称厚度,但后面就犯困了。那么此时就应该换一种思路,换一种结构来表达对axis轴的理解。
2. 由浅入深
先来看看一个图:
规定,最外层为axis=0,里面一层为axis=1,在进行与轴相关的操作时,就会按照对应轴里面的元素进行操作。
求和举例
sum函数详解, 深入了解Python和NumPy中的sum函数
先创建一个二维数组
import numpy as np
n1 = np.array([[1,2,3], [4,5,6]])
(1). 按axis=0进行求和
n1.sum(axis=0)
结果:
array([5, 7, 9])
axis=0指最外层[ ], 它里面包含两个数值,一个[1,2,3], 一个[4,5,6]
求和就相当于将这两个数值相加:(按所有行的每一列的和求值)
[1,2,3] + [4,5,6] = [5,6,7]
array([5,6,7]) # sum函数求和降维,结果为一维
这样就不用再去浪费时间去想:是行相加还是列相加呢?容易出错还不易扩展
注意:sum函数默认求和降维
(2). 按axis=1进行求和
np.sum(n1, axis=1)
axis=1指最外层进一层[ [ ] ], 它有两部分,每一部分有3个值:一个1、2、3, 一个4、5、6
求和就相当于将每一部分内的值进行相加:
[1+2+3, 4+5+6] = [6,15]
array([6,15]) # sum函数求和降维,结果为一维
求最大值举例
np.random.seed(1)
x = np.random.randint(0,12,size=(3,4))
x的值:
array([[ 8, 8, 6, 11],
[ 2, 11, 8, 7],
[ 2, 1, 11, 5]])
求axis=0的最大值:
np.max(x, axis=0)
结果:
array([ 8, 11, 11, 11])
在axis=0的轴找直接子元素,每个子元素的第0个值放在一起求最大值,第1个值放在一起求最大值…以此类推
求axis=1的最大值:
np.max(x, axis=1)
在axis=1的轴找直接子元素,3个部分,每个部分子元素为4个,来比较出每个部分的最大值
删除元素举例
np.random.seed(1)
x = np.random.randint(0,12,size=(3,4))
x的值:
array([[ 8, 8, 6, 11],
[ 2, 11, 8, 7],
[ 2, 1, 11, 5]])
删除axis=0的序列
np.delete(x, 0, axis=0)
结果:
array([[ 2, 11, 8, 7],
[ 2, 1, 11, 5]])
按axis=0的轴进行删除,删除第0个直接子元素
删除axis=1的序列
np.delete(x, 0, axis=1)
结果:
array([[ 8, 6, 11],
[11, 8, 7],
[ 1, 11, 5]])
按axis=1的轴进行删除,删除第0个直接子元素
3. 三维以上的数据
按照之前的原理,按照axis=0的方式进行相加,得到的结果如下:
按照axis=1的方式进行相加,得到的结果如下: