知乎上看到的超好的讲解文章,摘录过来了。原作者是射命丸咲,原文地址是:Python · numpy · axis

摘录如下(些微做了一丁点删减):

要想学习 axis,首先要知道的就是 axis 的计数方式。我们在使用 numpy 的各种函数——比如说 np.sum——的时候,有一个参数就叫做 axis。那么这个参数的意思是什么呢?最直白地来说的话,就是“最外面的括号代表着 axis=0,依次往里的括号对应的 axis 的计数就依次加 1

举个例子,现在我们有一个二维矩阵在 numpy 里面是这样被表达出来的:x = [ [0, 1], [2, 3] ],然后 axis 的对应方式就是:

所以相应的运算就是:

对应的代码实现和运行结果如下:

可以看到,貌似出来的结果比我们推导的结果的括号要少一些。这是因为诸如 np.sum 这种函数中有一个参数叫 keepdims,它的默认值是 False,此时它会把多余的括号给删掉。假如我们把它设为 True 的话,就可以得到和推导中一致的结果了:

下面来看一个更“高维”一点的例子:

对应的代码实现和运行结果如下:

以及

可以看到结果和我们推导的确实一样

现在我们知道哪个 axis 对应于数组中的哪些元素了,接下来还需要知道的就是 transpose 这个函数到底在背后干了什么。从纸面上来看,如果一个高维数组 x 的 shape 是 (2, 3, 4),那么 transpose 的作用就是把这个 shape 中各个数的顺序改一改。比如说:

但是 transpose 返回的结果究竟是如何得到的?

首先是对这个 shape 的理解。直观地说,shape 中的各个数就是对应 axis 的元素个数。比如说上图中的 x,它画出来会是这个样子的:

如果我们换一种思路的话,以 axis=0 为例,由于我们现在整个数组里面一共有 24 个数,而 axis=0 只有两个元素,所以可以理解为在 axis=0 这个 axis 上,每隔 24 / 2 = 12 个数就跳一下。比如说上面这个图中就可以看出,两个橙色矩阵对应的数之间差的都是 12。

类似的,由于一个橙色矩阵中只有 24 / 2 = 12 个数,所以我们可以理解为在 axis=1 这个 axis 上,每隔 12 / 3 = 4 个数就跳一下。表现在图中,就是同一个橙色矩阵的两个相邻的蓝色向量对应的数之间差的都是 4

再次类似的,由于一个蓝色向量中只有 12 / 3 = 4 个数,我们可以理解为在 axis=2 这个 axis 上,每隔 4 / 4 = 1 个数就跳一下。表现在图中……想必也知道是怎样的了......

所以我们现在可以定义一个新的东西,比如说叫做 strides 吧,它记录着每个 axis 上跳过的数。比如说上图对应的三维数组,它的 strides 就是 (12, 4, 1)

那么接下来激动人心的时刻到了:transpose 的本质,其实就是对 strides 中各个数的顺序进行调换。举个例子:

在 transpose(1, 0, 2) 后,相应的 strides 会变成 (4, 12, 1)。而从上图可以看出,transpose 的结果确实满足:

  • axis=0 的 axis 上,每隔 4 个数跳一下(对应的数字都差4,例如x[0,0,0]和x[1,0,0]差了4)
  • axis=1 的 axis 上,每隔 12 个数跳一下(对应的数字都差12,例如x[0,0,0]和x[0,1,0]差了12)
  • axis=2 的 axis 上,每隔 1 个数跳一下(对应的数字都差12,例如x[0,0,0]和x[0,0,1]差了1)

至此,transpose 背后的逻辑就理顺啦!撒花!*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。

numpy的axis相关推荐

  1. python axis 0_Python之NumPy(axis=0/1/2...)的透彻理解

    https://blog.csdn.net/sky_kkk/article/details/79725646 numpy中axis取值的说明 首先对numpy中axis取值进行说明:一维数组时axis ...

  2. Python之NumPy(axis=0 与axis=1)区分

    Python之NumPy(axis=0 与axis=1)区分 转载于:https://www.cnblogs.com/greatljg/p/10802392.html

  3. Python:一文让你彻底理解numpy中axis=-1/0/1/2... [实例讲解:np.argmax(axis= -1 0 1 2) np.sum(aixs= -1 0 1 2)]

    前言 接触python有一段时间了,但总有一道坎在心中挥之不去,那就是Numpy模块中的axis=-1/0/1/2...,每每见到axis=-1.axis=0.axis=1.axis=2等操作,心中真 ...

  4. python numpy.mean() axis参数使用方法【sum(axis=*)是求和,mean(axis=*)是求平均值】

    引用文章: 关于numpy mean函数的axis参数 https://www.jianshu.com/p/f9e3fd264932 import numpy as np X = np.array([ ...

  5. numpy中axis理解

    numpy库中有些函数有个参数axis,像ndarray.max()等,ndarray 其实就是一个多维数组,比python 内建的list多了一些对多维数组的操纵方法.如果一个多维数组是2*3*2, ...

  6. python之numpy之axis=1和axis=0

    对二维数组而言,一般来说axis=1表示对行进行操作,axis=0表示对列进行操作. 以sort1.mean2为例进行描述 sort >>> import numpy as np & ...

  7. numpy.AxisError: axis 1 is out of bounds for array of dimension 1

    原文地址 错误发生在执行np.concatenate(,axis=1)时 当我想把两个一维数据堆起来的时候,即 # 把 a = [1,2,3] b = [4,5,6] # 变成 [[1,2,3], [ ...

  8. python numpy中axis的含义_python numpy take_along_axis用法及代码示例

    通过匹配一维索引和数据切片从输入数组中获取值. 这将迭代沿索引和数据数组中沿指定轴定向的匹配1d切片,并使用前者在后者中查找值.这些切片的长度可以不同. 沿轴返回索引的函数,例如argsort和arg ...

  9. Python Numpy多维数组.sum(axis=0/1/2...) 详解

    Python Numpy多维数组.sum(axis=0/1/2-) 详解 numpy中axis取值的说明 首先对numpy中axis取值进行说明:一维数组时axis=0,二维数组时axis=0,1,维 ...

最新文章

  1. hdu4720 三角形的外接圆
  2. 起风了2019-12-26
  3. MATLAB R2021a v9.10 for win 最新无限制中英文完美版 数据处理软件
  4. 分布式事务 -- seata框架AT模式实现原理
  5. python3dijkstra_python3 实现Dijkstra(迪杰斯特拉)最短路径算法
  6. 百度人脸识别技术应用003---百度云离线SDK_Android版_功能分析_获取摄像头视频流中的图片_发给百度人脸识别API_识别搜索_或先同步百度云人脸信息_然后本地人脸识别
  7. 数据质量管理有哪些方法
  8. 走进 JDK 之谈谈字符串拼接
  9. ansible笔记(4):常用模块之文件操作
  10. 怎么将表中的空格都转变为0???
  11. [Flash开发笔记] AS中保留多少位小数的函数
  12. C# 使用Magick.NET进行图片格式转换
  13. 访谈完100个年入百万的自媒体人后,我总结了出了他们的共性
  14. 杭州自己缴纳社保五险条件
  15. [BD 41-1629] </zynq_ultra_ps_e_0/SAXIGP3/HP1_QSPI> is excluded from all addressable master spaces.
  16. java检索电脑的所有图片_查找电脑里重复的照片
  17. SSM整合之CRUD增删改查案例(非ajax版)
  18. mye连接mysql_利用MyEclipse连接数据库并自动生成基于注解或者XML的实体类
  19. PsExec用法及远程操控执行脚本举例
  20. Win10系统搜不到airpods?

热门文章

  1. python会不会内存泄露_记一次python 内存泄漏问题及解决过程 python 嵌套读取文件 内存泄露...
  2. 【交点】直线与多边形相交显示
  3. 三十二楼层选几层最好_1-32高楼层选最佳楼层 32层的电梯楼买房子几楼最好 黄金楼层...
  4. 小鱼在家助力天翼智能终端展,携手中国电信共创智能未来
  5. 基于微信小程序公司企业站系统 系统的设计与实现 开题报告和效果图
  6. 服装销售应如何掌握消费者心理
  7. hdu 3413 poj 3778 Single CPU, multi-tasking
  8. Service知识点整理
  9. JS window eval and load script!
  10. 100亿元拿下富力物业,碧桂园服务的“野心”究竟在哪?