搞清axis的含义,这一篇就够了!


axis的含义

在自己分析之前先摆上官方关于多维数组中axis的值的定义:

axis = 0,表示第一个维度

axis = 1,表示第二个维度

axis = -1,表示最后一个维度 【二维数组里axis=1和axis=-1等价】

以下先分析二维数组里axis=1和axis=0的区别,再分析三维数组里axis=-1,0,1的区别

PS:可以尝试先看看正规理解,如果能理解就不用看旁门左道式理解了~


旁门左道式理解

二维数组中的axis

我们先了解一下关于axis的一些知识~

axis用来为超过一维的数组定义属性。二维数据拥有两个轴:第0轴沿着行的方向垂直向下,第1轴沿着列的方向水平延申。1表示横轴,方向从左到右;0表示纵轴,方向从上到下。当axis=1时,数组的变化是横向的,体现出列的增加或者减少。反之,当axis=0时,数组的变化是纵向的,体现出行的增加或减少。

结合例子来看:

在这里插入图片描述

在这里插入图片描述
根据第二张图我们来理解axis,简单来讲,0轴沿着行的方向垂直向下竖着加,1轴沿着列的方向水平延申横着加


三维数组中的axis

摸着良心讲二维数组中axis真的是很好理解,三维数组中axis难以理解的地方在于,三维数组的[]太多了!所以在理解的时候很容易懵。话不多说,进入正题~

先看一组例子:

a = np.array([[[0, 1, 44], [3, 4, 25], [6, 7, 88]],
              [[9, 50, 11], [12, 73, 14], [15, 66, 17]],
              [[78, 19, 20], [91, 22, 23], [84, 25, 26]]])
print("a=", a)
b = np.max(a, axis=0)
print("b=", b)

运行结果:

a= [[[ 0  1 44]
  [ 3  4 25]
  [ 6  7 88]]

 [[ 9 50 11]
  [12 73 14]
  [15 66 17]]

 [[78 19 20]
  [91 22 23]
  [84 25 26]]]
b= [[78 50 44]
 [91 73 25]
 [84 66 88]]

把a = np.max(b, axis=0) 改成a = np.max(b, axis=1),则运行结果如下:

a= [[[ 0  1 44]
  [ 3  4 25]
  [ 6  7 88]]

 [[ 9 50 11]
  [12 73 14]
  [15 66 17]]

 [[78 19 20]
  [91 22 23]
  [84 25 26]]]
b= [[ 6  7 88]
 [15 73 17]
 [91 25 26]]

把a = np.max(b, axis=0) 改成a = np.max(b, axis=-1),则运行结果如下:

a= [[[ 0  1 44]
  [ 3  4 25]
  [ 6  7 88]]

 [[ 9 50 11]
  [12 73 14]
  [15 66 17]]

 [[78 19 20]
  [91 22 23]
  [84 25 26]]]
b= [[44 25 88]
 [50 73 66]
 [78 91 84]]

用第一个维度、第二个维度、最后一个维度来理解axis是很抽象的,所以本文用去掉[]的方式来帮助大家理解axis

三维数组是这样表示出来的
[[[]
[]
[]]

[[]
[]
[]]

[[]
[]
[]]]

而对数组进行操作是根据[]划分的范围来决定的

axis = 0,表示去掉[]之后进行max操作

去掉之后长这样:

[[ 0  1 44]
  [ 3  4 25]
  [ 6  7 88]]

 [[ 9 50 11]
  [12 73 14]
  [15 66 17]]

 [[78 19 20]
  [91 22 23]
  [84 25 26]]

也就是把一个三维数组分成了三个二维数组,则在找出最大值时(执行max时),是将三个二维数组每个相同位置的元素进行比较,最终取三个之中最大的作为该位置的最终值
【0,9,78中取78,1,50,19中取50…以此类推】

b= [[78 50 44]
 [91 73 25]
 [84 66 88]]

axis = 1,表示去掉[]之后进行max操作

去掉之后长这样:

[[ 0  1 44]
  [ 3  4 25]
  [ 6  7 88]

 [ 9 50 11]
  [12 73 14]
  [15 66 17]

 [78 19 20]
  [91 22 23]
  [84 25 26]]

也就变成了三个元素为一个“小组”的9个小组,从前三个小组每个相同位置的元素中选出最大值作为最终结果里第一行对应位置的最终值;从中间三个小组每个相同位置的元素中选出最大值作为最终结果里第二行对应位置的最终值;从后三个小组每个相同位置的元素中选出最大值作为最终结果里第三行对应位置的最终值。
【以中间三组为例:9,12,15中选取15赋值到第二行第一个位置;50,73,66中选取73第二行第二个位置;11,14,17中选取17第二行第三个位置】

b= [[ 6  7 88]
 [15 73 17]
 [91 25 26]]

axis = -1,表示去掉[]之后进行max操作

去掉之后长这样:

[[ 0  1 44
   3  4 25
   6  7 88]

 [ 9 50 11
  12 73 14
  15 66 17]

 [78 19 20
  91 22 23
  84 25 26]]

可以看出每个元素现在已经“各自为战”了,不同于之前的各个二维数组相同位置的元素每个小组相同位置的元素;他们只能以元素的身份和别的元素去比较。

第一行的元素比较结果作为第一行第一列的最终值,第二行的元素比较结果作为第一行第二列的最终值……第四行的元素比较结果作为第二行第一列的最终值……以此类推。

【78,19,20中取78赋值到第三行第一个位置,91,22,23中取91赋值到第三行第二个位置,84,25,26中取84赋值到第三行第三个位置】

b= [[44 25 88]
 [50 73 66]
 [78 91 84]]

正规理解

其实用维度理解挺好理解的

如果用x,y,z表示三维数组的三个维度

axis = 0时,确定最终二维数组的yi,zi时,也就是(x0,yi,zi)、(x1,yi,zi)、(x2,yi,zi)三个点的值作比较,取最大的放到(yi,zi)。

【确定(y1,z1)时,比较(x0,y1,z1)=4、(x1,y1,z1)=73、(x2,y1,z1)=22】

a= [[[ 0  1 44]
  [ 3  4 25]
  [ 6  7 88]]

 [[ 9 50 11]
  [12 73 14]
  [15 66 17]]

 [[78 19 20]
  [91 22 23]
  [84 25 26]]]
b= [[78 50 44]
 [91 73 25]
 [84 66 88]]

axis = 1时,确定最终二维数组的xi,zi时,也就是(xi,y0,zi)、(xi,y1,zi)、(xi,y2,zi)三个点的值作比较,取最大的放到(xi,zi)。

【确定(x1,z1)时,比较(x1,y0,z1)=50、(x1,y1,z1)=73、(x1,y2,z1)=66】

a= [[[ 0  1 44]
  [ 3  4 25]
  [ 6  7 88]]

 [[ 9 50 11]
  [12 73 14]
  [15 66 17]]

 [[78 19 20]
  [91 22 23]
  [84 25 26]]]
b= [[ 6  7 88]
 [15 73 17]
 [91 25 26]]

axis = -1时,确定最终二维数组的xi,yi时,也就是(xi,yi,z0)、(xi,yi,z1)、(xi,yi,z2)三个点的值作比较,取最大的放到(xi,yi)。

【确定(x1,y1)时,比较(x1,y1,z0)=12、(x1,y1,z1)=73、(x1,y1,z2)=14】

a= [[[ 0  1 44]
  [ 3  4 25]
  [ 6  7 88]]

 [[ 9 50 11]
  [12 73 14]
  [15 66 17]]

 [[78 19 20]
  [91 22 23]
  [84 25 26]]]
b= [[44 25 88]
 [50 73 66]
 [78 91 84]]
  • 30
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

·Jormungand

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值