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 相关文章推荐
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 Python
介绍Python的@property装饰器的用法
Apr 28 Python
Python实现的密码强度检测器示例
Aug 23 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
使用anaconda的pip安装第三方python包的操作步骤
Jun 11 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
Jun 17 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
python 如何执行控制台命令与操作剪切板
May 20 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中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
JS 字符串连接[性能比较]
2009/05/10 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python 命令行参数sys.argv
2008/09/06 Python
简单的Python抓taobao图片爬虫
2014/10/26 Python
python自定义解析简单xml格式文件的方法
2015/05/11 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
日语专业毕业生求职信
2013/12/04 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技