考虑到实际应用场景中,数组往往不止一个维度,因此遍历数组中所有元素,使用while和for循环写起来很麻烦,本文将介绍NumPy自带的数组遍历方法nditer。

迭代器对象 nditer 在numpy 1.6中引入,提供了许多灵活的方法来系统地访问一个或多个数组的所有元素。其最基本的任务的可以完成对数组元素的访问。一个简单的例子,如下:

通过执行结果,我们可以看到迭代过程不是使用标准 C 或者 Fortran 顺序,选择的顺序是和数组内存布局一致的,这样做是为了提高访问效率,默认是行序优先(row-major order,或者说是 C-order)。

这反映了默认情况下只需访问每个元素,而无需考虑其特定顺序。我们可以通过迭代上述数组的转置来看到这一点,并与以 C 顺序访问数组转置的 copy 方式做对比,示例如下:

从上述例子可以看出,a 和 a.T 的遍历顺序相同,即他们在内存中的存储顺序是一样的。而 a.T.copy(order = 'C') 的遍历结果是不同的,因为它和前两种的存储方式是不一样的,默认是按行访问。


控制迭代顺序

有时,无论内存中元素的布局如何,需要以特定的顺序访问数组元素。因此 nditer 对象提供 order 用于控制此迭代方面的参数。具有上述行为的默认值是order='K',就是上述的访问方式。对于C命令,可以用order='C'覆盖,对于Fortran命令,可以用order='F'覆盖。

  • for x in np.nditer(a, order='F'):order Fortran ,即是列序优先;
  • for x in np.nditer(a.T, order='C'):order C,即是行序优先;

示例如下

执行上述代码,输出结果为:

可以通过显式设置,来强制 nditer 对象使用某种顺序,如下:

执行上述代码,输出结果为:


修改数组值

默认情况下, nditer将待迭代遍历的数组为只读对象(read-only)。如果在遍历数组的同时,需要对数组元素值进行修改,必须使用 op_flags=readwrite 或 op_flags=writeonly。


使用外部循环

上面示例中是逐一访问数组中的每个元素,我们还可以一次访问某一个行或者某一列,这时候要用到flags参数 ,如 flags = external_loop,配合上控制顺序的参数order就可以按列输出或者按行顺序输出,如下:

如上,分别尝试了两种顺序的外部循环遍历数组n,F对应列优先顺序,输出的每一列组成一个数组。C对应行优先的顺,输出的所有元素组成一个数组。

flags参数,它可以接受下列值,参数描述:

  • c_index:可以跟踪 C 顺序的索引 。
  • f_index:可以跟踪 Fortran 顺序的索引 。
  • multi-index:每次迭代可以跟踪一种索引类型 。
  • external_loop:给出的值是具有多个值的一维数组,而不是零维数组 。

广播迭代

如果两个数组是可广播的,nditer 组合对象能够同时迭代它们。 假设数组 n 的维度为 2X2,数组 m 的维度为 2X1 ,则使用以下迭代器(数组 m 被广播到 n 的大小)。


边信息(即对应的两个数组值)_Python 数据分析 NumPy 模块迭代数组nditer方法详解...相关推荐

  1. java播放wma格式的音频文件,两种可将WMA文件在iPhone上播放的方法详解

    WMA是微软开发的一款音频数据压缩技术,也是现今使用非常广泛的音频格式之一.然而,由于它与苹果的iOS系统不兼容,所以该格式文件不能够在苹果系列数码产品如iPhone手机上播放.不过,只要有了方便快捷 ...

  2. Python数据分析-NumPy模块-选取数组元素

    一维数组的元素选取 选取单个元素 from numpy import array a=array([1,2,5,48,62,9,4,7,2,3,6,9]) # 正序索引,其值是从0开始计数 print ...

  3. 如何获取如何获取datagrid复选框的值_火影忍者博人传木叶丸获取方法详解 博人传木叶丸如何获取...

    火影忍者手游博人传木叶丸如何获取,相信很多玩家都不是很了解,那么具体的获取方法是什么呢,同时技能强度如何呢,下面小编给大家带来了详细的攻略内容,一起来看看吧. 火影忍者手游博人传木叶丸获取方法 距离策 ...

  4. php 去重_php求两数组交集的四种方法详解

    题目:给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1],nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5 ...

  5. matlab合并有序数组,《数组合并》JS合并两个数组的3种方法详解

    这篇文章主要介绍了JS合并两个数组的3种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一个包解决你所有的JS问题,点击获取 需要将两个数组 ...

  6. ES5和ES6数组遍历方法详解

    ES5和ES6数组遍历方法详解 在ES5中常用的10种数组遍历方法: 1.原始的for循环语句 2.Array.prototype.forEach数组对象内置方法 3.Array.prototype. ...

  7. python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

  8. pythonbool类型数组生成_对numpy中布尔型数组的处理方法详解

    布尔数组的操作方式主要有两种,any用于查看数组中是否有True的值,而all则用于查看数组是否全都是True. 如果用于计算的时候,布尔量会被转换成1和0,True转换成1,False转换成0.通过 ...

  9. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

最新文章

  1. 19-flutter的ListView 和 GridView的使用
  2. 《软件需求模式》阅读笔记01
  3. csp-s模拟测试44「D·E·F」
  4. Python打印杨辉三角形 RUNOOB python练习题61
  5. C++(12)--函数基础:按值传递、传递数组、函数指针
  6. 6年20多篇重磅论文,27岁浙大女博导太飒了~
  7. ios12关闭设置角标_iOS 12.4.2为停产的设备带来了安全修复程序
  8. 系统架构师学习笔记-数据通信与计算机网络(二)
  9. 开课吧python怎么样-找工作得有个大杀招,你看AI换脸这个技能怎么样?
  10. solr7在tomcat上的部署
  11. Java高并发程序设计学习笔记(八):NIO和AIO
  12. 网关支付、银联代扣通道、快捷支付、银行卡支付分别是怎么样进行支付的?
  13. “双一流”大学生们最爱看的计算机类书籍是它们
  14. 计算机用户中的配置文件,我的电脑的用户配置文件中多了一个未知的帐户 – 手机爱问...
  15. 洛谷P3369 AVL树
  16. 大数据应用场景”之隔壁老王(连载二)
  17. Linux监控平台搭建
  18. 谈谈玩游戏遇到的问题(巫师3)
  19. 美IT业25大秘密:Facebook耗时一周建成
  20. 深度学习 01 探索深度学习

热门文章

  1. 【ISL-1】统计学习概览
  2. 求反关系运算符:“服从分布”的符号表示 与 “不服从分布”的符号表示
  3. Python: 生成器,yield
  4. TCP_IP Sockets编程C语言实现第2版 源码下载
  5. Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority
  6. tomcat源码阅读之session管理器(Manager)
  7. 【转】cs231n学习笔记-CNN-目标检测、定位、分割
  8. 读写生信流程必备的 Perl 语法
  9. JAMA:Java矩阵包
  10. ip tcp udp mpeg4头结构的定义