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

文章目录

  • 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]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百战c++(12)

36. 定义 int **a[3][4], 则变量占有的内存空间为:_____ 37. 编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。 38.写一个函数,判…

Struts2.3.5+Hibernate3+Spring3.1基于注解实现的多文件上传,下载

Struts2.3.5Hibernate3Spring3.1基于注解实现的的多文件上传,下载,这里是上传文件到数据库中,上传控件可以增加和删除,有需要的朋友可以看看。 以下是源码下载地址:http://www.zuidaima.com/share/1639672872438784.htm jar包的下…

Pandas索引操作及高级索引——reindex()方法

文章目录索引对象多个数据结构之间共享index类对象is与的区别重置索引——reindex()索引操作Series的索引操作切片不连续索引布尔型索引DataFrame的索引操作获取不连续的Series对象切片Pandas库中的操作索引方法索引对象 Index类对象,该对象不可以进行修改&#xf…

【精品计划1】动态规划入门到熟悉,看不懂来打我啊

持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)0,F(1)1, F(n)F(n-1)…

Pandas数据排序——【按索引排序sort_index()方法、按值排序sort_value()方法】

文章目录按索引排序——sort_index()对Series排序对DataFrame排序按值排序——sort_value()对Series进行排序对DataFrame进行排序按索引排序——sort_index() sort_index(axis0, levelNone, ascendingTrue, inplaceFalse, kind‘quicksort’, na_position‘last’,sort_remaini…

【大总结2】大学两年,写了这篇几十万字的干货总结

本文是我大学两年知识的总结。涵盖数据结构、算法、语言基础、操作系统、关系数据库、NOSQL、网络/前端/项目基础知识、安全和测试、框架的学习、中间件和工具、设计模式和框架原理、我推荐的资料、我的建议 本篇文章应该算是Java后端开发技术栈的,但是大部分是基础…

Pandas对象的层次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】

文章目录层次化索引的概念层次化索引的创建使用嵌套列表的方式构造层次化索引对象Series对象DataFrame对象通过MultiIndex类的方法构建层次化索引通过from_tuples()方法创建MultiIndex对象通过from_arrays()方法创建MultiIndex对象通过from_product()方法创建MultiIndex对象层次…

《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集

我摊牌了,这篇文章,值得99%的人收藏 此文后续会改为粉丝可见,所以喜欢的请提前关注和收藏,不迷路。 最近有五本我喜欢的redis实体新书,想要的去评论,我写个随机数抽奖包邮送给你。 那么,准备好…

Python数据预处理之异常值的处理——【自定义的three_sigma()函数、boxplot()方法】

文章目录基于3σ原则检测异常值代码实现测试基于箱型图检测异常值异常值的处理基于3σ原则检测异常值 3σ原则,又称拉依达准则。是指假设一组检测数据只含有随机误差。对其进行计算处理得到标准偏差,按一定概率确定一个区间,凡是超过这个区间…

那个谷歌的网红扔鸡蛋的题,来看看教科书式的回答

leetcode顶级难题,谷歌面试天天问,来看看吧,带你来一步一步达到最优解。 谷歌不知道问了多少遍,蓝桥杯也出现过,leetcode上是顶级难题,到底是什么题能如此频繁地出现?我们一探究竟吧。 原题描述…

Python更改数据类型——astype()方法和to_numeric()函数

文章目录明确指定数据的类型通过dtypes属性进行查看创建Pandas对象指定数据类型转换数据类型通过astype()方法强制转换数据的类型通过to_numeric()函数转换数据类型明确指定数据的类型 通过dtypes属性进行查看 import pandas as pddf pd.DataFrame({A: [1, 2, 4],B: [9, -80…

不骗你,没读这一篇,你不可能懂二分

上篇文章讲动态规划获得了80k浏览,这次的二分也值得你们一看,这个系列是特别用心写的,准备出书的哦 动态规划 3.0 引子 图书馆自习的时候,一女生背着一堆书进阅览室,结果警报响了,大妈让女生看是哪本书把警报弄响了,女生把书倒出…

Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】

文章目录轴向堆叠数据——concat()函数横向堆叠与外连接纵向堆叠与内连接主键合并数据——merge()函数内连接方式外连接方式左连接方式右连接方式其他根据行索引合并数据——join()方法四种连接方式行索引与列索引重叠合并重叠数据——combine_first()方法轴向堆叠数据——conc…

超硬核!操作系统学霸笔记,考试复习面试全靠它

之后会发布基于基础知识的大部分算法的模拟代码合集,敬请关注。 进程基础 进程的基本概念 程序顺序执行的特征: 1)顺序性:处理机严格按照程序所规定的顺序执行,每一步操作必须在下一步操作开始前执行 2)封…

配置tomcat6.0的HTTPS(单向)

利用JDK自带的产生证书的工具 生成证书 建立一个脚本文件,内容如下: set SERVER_DN"CNServer, OUshare, Oshare, Lsz, Sgd, CCN" set CLIENT_DN"CNClient, OUshare, Oshare, Lsz, Sgd, CCN" set KS_PASS-storepass changeit set KE…

Python之数据重塑——【stack()方法和unstack()方法、pivot()方法】

文章目录重塑层次化索引对于单层索引的DataFrame类对象stack()方法unstack()方法对于多层索引的DataFrame类对象辨析操作内层索引与外层索引的区别查看多层索引对象转换后的类型轴向旋转——pivot()方法重塑层次化索引 Pandas中重塑层次化索引的操作主要是stack()方法和unstac…

超硬核!学霸把操作系统经典算法给敲完了!要知行合一

上期的笔记,浏览快1万了,既然关注的人很多,那就发出来承诺过的算法全模拟,希望帮到你们。 上期的操作系统学霸笔记,考试复习面试全靠它 一、模拟进程调度 功能 data.h #ifndef _Data_h_ #define _Data_h_#include …

Python之数据转换——【rename()方法、cut()函数、get_dummies()函数】

文章目录重命名轴索引离散化连续数据哑变量处理类别型数据重命名轴索引 rename( self, mapper: Optional[Renamer] None, *, index: Optional[Renamer] None, columns: Optional[Renamer] None, axis: Optional[Axis] None, copy: bool True, inplace: bool False, level…

超硬核!数据结构学霸笔记,考试面试吹牛就靠它

上次发操作系统笔记,很快浏览上万,这次数据结构比上次硬核的多哦,同样的会发超硬核代码,关注吧。 超硬核!操作系统学霸笔记,考试复习面试全靠它 第一次笔记(复习c,课程概述&#xff…

Python之数据拆分——groupby()方法

文章目录groupby()方法通过列名进行分组通过Series对象进行分组Series对象与原数据的行索引长度相等Series对象与原数据的行索引长度不等通过字典进行分组按照columns轴的方向进行分组按照index轴的方向进行分组通过函数进行分组groupby()方法 groupby( self, byNone, axis0, l…