[开发技巧]·Numpy中对axis的理解与应用

1.问题描述

在使用Numpy时我们经常要对Array进行操作,如果需要针对Array的某一个纬度进行操作时,就会用到axis参数。

一般的教程都是针对二维矩阵操作axis,当axis为0时,计算方向时列,当axis为1时计算方向为行。

但是这样的描述并不能让我们真正理解axis的含义。下面我一个三维Array,来带领大家深入理解axis

2.实战讲解

>>> import numpy as np
>>> arrays = np.arange(0,12).reshape([2,3,2])
>>> arrays
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]], [[ 6, 7],
[ 8, 9],
[10, 11]]])
>>> np.sum(arrays)
66
>>> np.sum(arrays,axis=0)
array([[ 6, 8],
[10, 12],
[14, 16]])
>>> np.sum(arrays,axis=1)
array([[ 6, 9],
[24, 27]])
>>> np.sum(arrays,axis=2)
array([[ 1, 5, 9],
[13, 17, 21]])

为什么是这个结果呢,笔者来帮大家说梳理一下:

首先我们新建了一个shape(2,3,3)的Array

1.用np.sum(arrays)时,计算的是所有元素的和。

2.用np.sum(arrays,axis = 0)时,我们可以这样理解,以最外面的[ ]为一个list,对里面两个元素(每个元素都是二维Array)进行相加求和,所以得到的Array和相加元素形状相同。

2.用np.sum(arrays,axis = 1)时,以中间的[ ]为一个list,对里面三个元素(每个元素都是一维Array)进行相加求和,所以得到的Array和相加元素形状相同,但是由于有两个中间的[ ],所以把两个拼接在了一起。

3.用np.sum(arrays,axis = 2)时,以最里面的[ ]为一个list,对里面两个元素(每个元素都是一个人说)进行相加求和,所以得到的Array和相加元素形状相同,但是由于有两个中间的[ ],每个中间的[ ]包含三个[ ],最终shape为(2,3)。

类似其实我们在使用下标选取内容时使用相同的概念

>>> import numpy as np
>>> arrays = np.arange(0,12).reshape([2,3,2])
>>> arrays
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]], [[ 6, 7],
[ 8, 9],
[10, 11]]])
>>> arrays[0,:,:]
array([[0, 1],
[2, 3],
[4, 5]])
>>> arrays[:,0,:]
array([[0, 1],
[6, 7]])
>>> arrays[:,:,0]
array([[ 0, 2, 4],
[ 6, 8, 10]])
>>>

大家可以根据笔者上面讲述的,好好理解分析一下为什么是这样。

hope this helps

[开发技巧]·Numpy中对axis的理解与应用的更多相关文章

  1. [开发技巧]·Numpy广播机制的深入理解与应用

    [开发技巧]·Numpy广播机制的深入理解与应用 1.问题描述 我们在使用Numpy进行数据的处理时,经常会用到广播机制来简化操作,例如在所有元素都加上一个数,或者在某些纬度上作相同的操作.广播机制很 ...

  2. [开发技巧]·TensorFlow中numpy与tensor数据相互转化

    [开发技巧]·TensorFlow中numpy与tensor数据相互转化 个人主页–> https://xiaosongshine.github.io/ - 问题描述 在我们使用TensorFl ...

  3. numpy 中的axis轴问题

    在numpy库中,axis轴的问题比较重要,不同的值会得到不同的结果,为了便于理解,特此将自己的理解进行梳理 为了梳理axis,借助于sum函数进行! a = np.arange(27).reshap ...

  4. 关于NumPy中数组轴的理解

    参考原文链接(英文版):https://www.sharpsightlabs.com/blog/numpy-axes-explained/:中文版:https://www.jianshu.com/p/ ...

  5. Javascript开发技巧(JS中的变量、运算符、分支结构、循环结构)

    一.Js简介和入门 继续跟进JS开发的相关教程. <!-- [使用JS的三种方式] 1.HTML标签中内嵌JS(不提倡使用): 示例:<button onclick="javas ...

  6. 对NumPy中dot()函数的理解

    今天学习到numpy基本的运算方法,遇到了一个让我比较难理解的问题.就是dot函数是如何对矩阵进行运算的. 一.dot()的使用 参考文档:https://docs.scipy.org/doc/num ...

  7. numpy中的convolve的理解

    https://blog.csdn.net/u011599639/article/details/76254442 函数 numpy.convolve(a, v, mode=‘full’),这是num ...

  8. [开发技巧]·Python极简实现滑动平均滤波(基于Numpy.convolve)

    [开发技巧]·Python极简实现滑动平均滤波(基于Numpy.convolve) ​ 1.滑动平均概念 滑动平均滤波法(又称递推平均滤波法),时把连续取N个采样值看成一个队列 ,队列的长度固定为N ...

  9. [开发技巧]·pandas如何保存numpy元素

    [开发技巧]·pandas如何保存numpy元素 ​ 1.问题描述 在开发的过程中遇到一个问题,就是需要把numpy作为pandas的一个元素进行保存,注意不是作为一列元素.但是实践的过程中却不顺利, ...

随机推荐

  1. BZOJ_4590_[Shoi2015]自动刷题机_二分答案

    BZOJ_4590_[Shoi2015]自动刷题机_二分答案 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题 ...

  2. BZOJ_2721_[Violet 5]樱花_数学

    BZOJ_2721_[Violet 5]樱花_数学 Description Input Output $\frac{1}{x}+\frac{1}{y}=\frac{1}{m}$ $xm+ym=xy$ ...

  3. BZOJ_3626_[LNOI2014]LCA_离线+树剖

    BZOJ_3626_[LNOI2014]LCA_离线+树剖 题意: 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度, ...

  4. Angularjs interceptor

    angularJs 请求过滤 新建一个服务, $HttpProvider 中有一个 interceptore 数组,所谓的拦截器就是一个注册到该数组的工厂,该工厂在app.config() 中注入, ...

  5. pods "xxx" is forbidden: SecurityContext.RunAsUser is forbidden

    报错信息如下: pods "k8s-logs-cndf5" is forbidden: SecurityContext.RunAsUser is forbidden 解决方法: 需 ...

  6. Java - 静态代理详讲

    Java - 静态代理详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 写在前面:*此章内容比较抽象,所以需要结合实际操作进行讲解*                   *需要有 ...

  7. 关于ES5的indexof()和ES7的includes()的区别

    早es5的时候就有了查找数组中是否包含某个值的API  indexOf(); 使用方法很简单,比如有个数组是: var arr=[2,3,4,"php"] 如果我们想知道数组中有没 ...

  8. C++删除文件末尾字符

    C++中使用fstream来进行文件读写,如果要覆盖文件末尾的部分字符,应该怎么操作呢? #include <iostream> #include <fstream> std: ...

  9. 史诗级Java资源大全中文版

    本文来自GitHub 上 Awesome - java 系列的资源整理.awesome-java 就是 akullpp 发起维护的 Java 资源列表,内容包括:构建工具.数据库.框架.模板.安全.代 ...

  10. [ gczdac ] 20190213 开博客啦!

    测试一下! 今天开了新博客! 还自己改了下首页! 开心!!!!! 访者必阅 https://www.cnblogs.com/gczdac/ https://blog.csdn.net/qq_43540 ...