文章目录

  • axis的含义
  • 旁门左道式理解
    • 二维数组中的axis
    • 三维数组中的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 443  4 256  7 88][ 9 50 1112 73 1415 66 17][78 19 2091 22 2384 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]]

搞清axis的含义,这一篇就够了!相关推荐

  1. plt、fig、axes、axis的含义

    目录 绘图常用方法 pyplot绘图 面向对象的API plt.fig.axes.axis的含义 plt figure,axes与axis add_subplot与add_axes 应用 绘图常用方法 ...

  2. Matplot pyplot绘制单图,多子图不同样式详解,这一篇就够了

    Matplot pyplot绘制单图,多子图不同样式详解,这一篇就够了 1. 单图单线 2. 单图多线不同样式(红色圆圈.蓝色实线.绿色三角等) 3. 使用关键字字符串绘图(data 可指定依赖值为: ...

  3. python正则r的作用_Python正则表达式,这一篇就够了!

    原标题:Python正则表达式,这一篇就够了! 大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达 ...

  4. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  5. 学习MyBatis3这一篇就够了

    目录 第一章 MyBatis3概述 1.1.概述 1.2.特点 1.3.对比 1.4.官网 1.5.下载 第二章 MyBatis3的增删改查 2.1.环境准备 2.2.创建工程 2.3.导入依赖 2. ...

  6. 微信小程序开发❤手摸手撸小程序一篇就够!

    手摸手撸小程序!!超简单,一篇就够! 微信小程序介绍 微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用 ...

  7. Linux基础知识汇总,看这一篇就够了(2022最新整理)

    前言 想入门Llinux,新手不知道Linux怎么入门?有这一篇就够了 提示:以下是本篇文章正文内容,下面案例可供参考 一.Linux入门概述 概述 Linux全称GNU/Linux,是一种免费使用和 ...

  8. 这一篇就够啦,带你了解MySQL的常用技巧

    前言 相关mysql 博客链接 这一篇就够啦,带你了解MySQL,SQL层面的优化 https://blog.csdn.net/qq_42292373/article/details/10891617 ...

  9. 「 Java开发规范 」10人小团队Java开发规范参考这篇就够了

    <菜鸟程序员成长计划>之团队高效合作[开发规范篇] 1.「 Java开发规范 」10人小团队Java开发规范参考这篇就够了! 2.「 前端开发规范 」10人小团队前端开发规范参考这篇就够了 ...

最新文章

  1. cannot import name ‘izip‘ from ‘itertools‘
  2. Angular2 - [innerHTML] pipe(把字符串里的 /n 替换成 <br/>)
  3. 在Application_Error事件中获取当前的Action和Control
  4. Requests库实战(三)---爬取豆瓣电影详细信息
  5. java 数组正则表达式_java正则表达式实现提取需要的字符并放入数组【ArrayList数组去重复功能】...
  6. 三维数据平滑处理_黑白象片的密度信息 卫星数据处理 遥感制图 三维建模 善图科技...
  7. 启动成功浏览器显示不了_移动端利用chrome浏览器在PC端进行调试方法
  8. 信息学奥赛一本通(1034:计算三角形面积)
  9. 一秒等于多少毫秒_全国首批!海宁5G正式商用!用手机的人必看!快多少?价贵吗?怎么换?...
  10. dump文件_windows程序崩溃时生成dump文件方法
  11. mvc 怎么把后台拼接好的div写到前台_PR:被写黑稿了怎么办?
  12. 图文演示戴尔win10重装系统步骤
  13. oracle exclude table,EXPDP/IMPDP:关于EXCLUDE参数
  14. python画菱形的代码_Python怎么用星号画平行四边形菱形
  15. 如何在word里里面打勾
  16. vCenter学习笔记
  17. 操作系统 -- 哲学家就餐问题
  18. GifCam – 更好用的 gif 动画录制/剪辑工具
  19. React Native-9.React Native Touchable组件详解
  20. USB驱动分析(三)

热门文章

  1. 三元组法矩阵加法java_计算机视觉学习笔记(2.1)-KNN算法中距离矩阵的计算
  2. 图形基本变换c语言代码,图形变换-C语言课程设计.doc
  3. BootLoader与Linux内核的参数传递
  4. 三种嵌入式操作系统的分析与比析
  5. WinCE6下的kernelIoControl使用方法
  6. python 线程池_老程序员的经验分享:Python 从业十年是种什么体验?
  7. Oracle客户端与java_Oracle 谈 JavaFX 及 Java 客户端技术的未来
  8. Java学习笔记——函数式接口
  9. linux怎么删除exe文件夹,ubuntu linux 批量删除文件
  10. 小数点化分数的过程_分数和小数的互化