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

2023-11-14


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]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 机器学习:聚类算法实现流程

    学习目标 掌握K means聚类的实现步骤 k means其实包含两层内容 K 初始中心点个数 计划聚类数 means 求中心点到其他数据点距离的平均值 1 k means聚类步骤 1 随机设置K个特征空间内的点作为初始的聚类中心 2 对于
  • 抖音矩阵系统功能开发及开发文档说明

    抖音账号矩阵系统开发文档是矩阵系统开发的重要文件 涵盖了矩阵系统的设计 实现 测试和维护等方面的相关信息 这些信息是矩阵系统开发人员进行系统开发的重要参考 有助于确保系统开发的顺利进行和最终的实现效果 矩阵系统开发文档一般包括以下几个方面的
  • mysql的悲观锁和乐观锁

    悲观锁 悲观锁指的是对数据被外界 包括本系统当前的其他事务 以及来自外部系统的事务处理 修改持保守态度 因此 在整个数据处理过程中 将数据处于锁定状态 悲观锁的实现 往往依靠数据库提供的锁机制 也只有数据库层提供的锁机制才能真正保证数据访问
  • MyBatis框架的作用?

    1 MyBatis 是一个优秀的基于 java 的持久层框架 它内部封装了 jdbc 使开发者只需要关注 sql 语句本身 而不需要花费精力去处理加载驱动 创建连接 创建 statement 等繁杂的过程 2 MyBatis为了和数据库进行
  • C++函数(详细版)

    函数 函数指针 内联函数 decltype关键字 atuo关键字 返回引用 const关键字 二维数组 函数指针 概念 函数也是有地址的 而指向这个地址的指针就是函数指针 1 获取函数的地址 使用函数名即可 例如think 是一个函数 则t
  • Python编程挑战赛

    题1 给小朋友分糖 每人分到糖的数量不同 输入小朋友的数量 计算至少需要多少糖 思路 第1个小朋友1颗糖 第2个小朋友2颗糖 第3个小朋友3颗糖 第n个小朋友n颗糖 计算1 2 n的和即可 第1种写法 不用Python高级函数 n int
  • 安装和简单使用visual studio 2017

    1 安装visual studio installer小程序 VS 2017社区版 Community 下载地址 百度网盘下载链接 百度网盘 请输入提取码 密码 ub6c 2 在visual studio installer里下载安装vis
  • Vue3 自定义指令

    在前端项目中 有很多需求是需要在多页面进行逻辑处理 通常我们所需要的功能可以通过DOM操作来实现 或者多处功能一致 我们就可以使用自定义指令 在vue2中的自定义指令指令注册的方法是 v focus js import vue from v
  • 概率论之 -- 边缘分布

    边缘分布 Marginal Distribution 指在概率论和统计学的多维随机变量中 只包含其中部分变量的概率分布 中文名 边缘分布 外文名 marginal distribution 又 名 边际分布 应用学科 概率论 统计学 定义
  • 还在用夸克?这3款能安装插件的手机浏览器不香吗

    说到浏览器插件 很多人想到的多数是电脑上的玩法 实际上 随着手机浏览器功能越来越完善 很多手机浏览器已经开始支持插件的使用 也就是说 支持安装插件的手机浏览器 不仅能体验如电脑般丝滑强大的功能 而且又不会造成内存过分臃肿 开启响应缓慢的问题
  • GLSL着色器的正确文件扩展名是什么?

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 glslangValidator exe工具使用 二 着色器程序后缀名 前言 我正在学习glsl着色 我遇到了不同的文件格式 我见过人们给出他们的顶点和片段着色器 ve
  • Java中在特定区间产生随机数

    原文地址 http blog sina com cn s blog 59aebaa10100ct47 html 参考地址 http blog csdn net codefunjava article details 44408555 htt
  • 贝叶斯分类器-机器学习ML

    参考 1 统计学习方法 李航 2 https baike baidu com item E8 B4 9D E5 8F B6 E6 96 AF E5 88 86 E7 B1 BB E5 99 A8 1739590 fr aladdin 3 h
  • 力扣|错误的集合 C语言

    题目连接 错误的集合 集合 s 包含从 1 到 n 的整数 不幸的是 因为数据错误 导致集合里面某一个数字复制了成了集合里面的另外一个数字的值 导致集合 丢失了一个数字 并且 有一个数字重复 给定一个数组 nums 代表了集合 S 发生错误
  • 浅析muduo库中的定时器设施

    一个设计良好的定时器在服务端的应用程序上至关重要 muduo定时器的实现陈硕大牛在书中已经详细的谈过 笔者尝试从源码的角度解读定时器的实现 如果理解不对 欢迎指正 在muduo的定时器系统中 一共由四个类 Timestamp Timer T
  • 学习CSSGrid布局

    一 重要术语 CSS Grid 网格 布局 又称为 Grid 网格 是一个二维的基于网格的布局系统 它的目标是完全改变我们基于网格的用户界面的布局方式 FlexBox 一维布局 Grid 二维布局 Flexbox 和 Grid 能协同工作
  • C# 文件IO

    文章目录 判断某个文件夹是否存在 获取当前运行程序 exe或dll 所在路径 创建文件夹 移动 剪切 文件夹 复制文件 创建文件 覆盖写文件 方式一 使用FileStream 方式二 使用StreamWriter 追加写文件 读文件 一 一
  • springBoot国际化的一种方式

    引言 当我们的应用面向不同国家用户时 根据不同的locale返回不同的语言信息的国际化功能就显得有必要了 一般来说国际化主要表现在前端用户界面上 在现在前后端分离的背景下 前端页面的国际化交由前端代码独立完成 少部分表现在后端上 后端主要表
  • HTML存储详解

    和大家一起先来了解一下H5之前的存储方式 cookies的诞生 http请求头上带着数据 大小只能为4K 主Domain的污染 下面是百度的一些Cookies HTTP中带 的表示 只能被服务器端修改的数据 一般用来存储身份验证等信息 co
  • 搞清axis的含义,这一篇就够了!

    文章目录 axis的含义 旁门左道式理解 二维数组中的axis 三维数组中的axis 正规理解 axis的含义 在自己分析之前先摆上官方关于多维数组中axis的值的定义 axis 0 表示第一个维度 axis 1 表示第二个维度 axis