NumPy中的维度Axis详解


Posted in Python onNovember 26, 2019

浅谈NumPy中的维度Axis

NumPy中的维度是一个很重要的概念,很多函数的参数都需要给定维度Axis,如何直观的理解维度呢?我们首先以二维数组为例进行说明,然后推广到多维数组。

(有人将ndim属性叫维度,将axis叫轴,我还是习惯将axis称之为维度,axis=0称为第一个维度)

二维数组的列子

下面是一个二维数组的列子:

In [1]: import numpy as np

In [2]: x = np.random.randint(0, 9, (2, 3))

In [3]: x
Out[3]:
array([[0, 8, 6],
    [1, 2, 1]])

In [4]: x.ndim
Out[4]: 2

In [5]: x.shape
Out[5]: (2, 3)

In [6]: x[0]
Out[6]: array([0, 8, 6])

In [7]: x[:, 0]
Out[7]: array([0, 1])

In [8]: x.sum(axis=0)
Out[8]: array([ 1, 10, 7])

In [9]: x.sum(axis=1)
Out[9]: array([14, 4])

In [10]: x[0] + x[1]
Out[10]: array([ 1, 10, 7])

In [11]: x[:, 0] + x[:, 1] + x[:, 2]
Out[11]: array([14, 4])

看上面这个例子,x是一个2行3列的数组,所以x是一个二维数组。

从第6和第7个输入输出,我们可以肯定地说"对于二维数组,第一维指的是行,第二维指的是列"。

我们通过sum求和函数,探究一下x的第一维和第二维的意义?从第8个和第9个输入输出,我们可以看到对于参数axis=0,其结果是数组列的和;而对于参数axis=1,其参数是数组行的和。

对于axis=0第一个维度求和,不是将第一维度(行)中的所有元素相加,而是沿着第一个维度,将对应其他维度(列)的数据相加,分解开来就是第10个输入输出。同理,对于axis=1,是沿着列,将行中的元素相加。

NumPy中对于维度的操作都是以类似这样的逻辑操作的。

多维数组

对于多维数组我们如何准确区分维度呢?下面以图示进行说明:

NumPy中的维度Axis详解

所以,我的结论就是:在概念上维度是从整体到局部看的,最外围的是第一个维度,然后依次往里,最内部的就是最后一维。

下面我们用代码验证一下上面的结论:

In [19]: x = np.random.randint(0, 9, (2, 3, 4))

In [20]: x
Out[20]:
array([[[0, 7, 5, 5],
    [6, 3, 1, 3],
    [7, 5, 3, 4]],

    [[8, 1, 4, 6],
    [8, 1, 4, 8],
    [3, 0, 8, 2]]])

In [21]: x[0]
Out[21]:
array([[0, 7, 5, 5],
    [6, 3, 1, 3],
    [7, 5, 3, 4]])

In [22]: x[:, 0, :]
Out[22]:
array([[0, 7, 5, 5],
    [8, 1, 4, 6]])

可以看到,第21个输入输出取到的是第一维的第一个元素,第22个输入输出取到的是第二维的第一个元素。大家可以细细体味一下!

以上这篇(标题)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中的全局变量用法分析
Jun 09 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
numpy.delete删除一列或多列的方法
Apr 03 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
Jun 09 Python
python列表推导式操作解析
Nov 26 #Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 #Python
简单了解python数组的基本操作
Nov 26 #Python
python实现图片插入文字
Nov 26 #Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 #Python
python向图片里添加文字
Nov 26 #Python
python 遍历pd.Series的index和value
Nov 26 #Python
You might like
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
php封装一个异常的处理类
2017/06/08 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
canvas知识总结
2017/01/25 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
高校毕业生自我鉴定
2013/10/27 职场文书
洗发露广告词
2014/03/14 职场文书
有关朝花夕拾的读书笔记
2015/06/29 职场文书
技术入股合作协议书
2016/03/21 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
Java 数组内置函数toArray详解
2021/06/28 Java/Android
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS