Axis-轴的深度理解

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的方式进行相加,得到的结果如下:
在这里插入图片描述

发布了45 篇原创文章 · 获赞 1 · 访问量 2436

猜你喜欢

转载自blog.csdn.net/weixin_44225602/article/details/102780843