1. Single array iteration

>>> a = np.arange(6).reshape(2,3)
>>> for x in np.nditer(a):
...     print x,
...
0 1 2 3 4 5
  • 也即默认是行序优先(row-major order,或者说是 C-order),这样迭代遍历的目的在于,实现和内存分布格局的一致性,以提升访问的便捷性;
>>> for x in np.nditer(a.T):
...     print x,
...
0 1 2 3 4 5
>>> for x in np.nditer(a.T.copy(order='C')):
...     print x,
...
0 3 1 4 2 5
  • 也即对 aa.T 的遍历执行的是同意顺序,也即是它们在内存中的实际存储顺序。

2. 控制遍历顺序

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

3. 修改数组中元素的值

默认情况下,nditer将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only的模式。

>>> a
array([[0, 1, 2],[3, 4, 5]])
>>> for x in np.nditer(a, op_flags=['readwrite']):
...     x[...] = 2 * x
...
>>> a
array([[ 0,  2,  4],[ 6,  8, 10]])

4. 使用外部循环

将一维的最内层的循环转移到外部循环迭代器,使得 numpy 的矢量化操作在处理更大规模数据时变得更有效率。

>>> a = np.arange(6).reshape(2,3)
>>> for x in np.nditer(a, flags=['external_loop']):
...     print x,
...
[0 1 2 3 4 5]
>>>
>>> for x in np.nditer(a, flags=['external_loop'], order='F'):
...     print x,
...
[0 3] [1 4] [2 5]

5. 追踪单个索引或多重索引(multi-index)

>>> a = np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],[3, 4, 5]])
>>> it = np.nditer(a, flags=['f_index'])
>>> while not it.finished:
...     print "%d <%d>" % (it[0], it.index),
...     it.iternext()
...
0 <0> 1 <2> 2 <4> 3 <1> 4 <3> 5 <5># 索引的编号,以列序优先
>>> it = np.nditer(a, flags=['multi_index'])
>>> while not it.finished:
...     print "%d <%s>" % (it[0], it.multi_index),
...     it.iternext()
...
0 <(0, 0)> 1 <(0, 1)> 2 <(0, 2)> 3 <(1, 0)> 4 <(1, 1)> 5 <(1, 2)>

references

  • Iterating Over Arrays

nditer —— numpy.ndarray 多维数组的迭代相关推荐

  1. numpy ndarray 多维数组的内存管理

    1. ndarray.flags:内存布局(layout) https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.fla ...

  2. Numpy之N维数组-ndarray

    Numpy之N维数组-ndarray 1 ndarray的属性 数组属性反映了数组本身固有的信息. 属性名字 属性解释 ndarray.shape 数组维度的元组    [假如是8行5列的数组,将会返 ...

  3. NumPy 创建多维数组

    NumPy 创建多维数组 arange 函数创建的数组作为列表元素,把这个列表作为参数传给 array 函数,从而创建了一个 2 × 2 的数组,而且没有出现任何报错信息. Example 1 #!/ ...

  4. Numpy 笔记: 多维数组的切片(slicing)和索引(indexing)【转】

    目录 切片(slicing)操作 索引(indexing) 操作 最简单的情况 获取多个元素 切片和索引的同异 切片(slicing)操作 Numpy 中多维数组的切片操作与 Python 中 lis ...

  5. numpy获取二维数组某一行、某一列

    numpy获取二维数组某一行.某一列 1.需求 有一个二维数组: a = [[1, 2, 3, 4, 5, 6],[7, 8, 9, 10, 11, 12],[13.2, 14.8, 15.9, 16 ...

  6. Python numpy实现二维数组和一维数组拼接

    撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape 输出的值应该为(3,) 二维数组 2.numpy初始化二 ...

  7. python一维数组和二维数组,Python numpy实现二维数组和一维数组拼接的方法

    撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape 输出的值应该为(3,) 二维数组 2.numpy初始化二 ...

  8. 图解数据分析(9) | Numpy - 与1维数组操作(数据科学家入门·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/33 本文地址:https://www.showmeai.tech/article-d ...

  9. 图解数据分析(10) | Numpy - 与2维数组操作(数据科学家入门·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/33 本文地址:https://www.showmeai.tech/article-d ...

最新文章

  1. 设置RGBColor
  2. python sqlite3以字典形式返回查询结果
  3. Zookeeper分布式一致性原理(五):Zookeeper-Java-API
  4. NLP之TopicModel:朴素贝叶斯NB的先验概率之Dirichlet分布的应用
  5. RedHat YUM configure
  6. C++接收字符串数组_PHP常用字符串函数(1),PHP面试重点
  7. PHP Smarty变量调节器
  8. docker镜像创建与优化
  9. 什么样的架构师才是真正的架构师?
  10. 基类成员函数和派生类成员函数不构成重载
  11. ExtJs布局学习笔记
  12. 杰魔(Geomagic Design)逆向工程软件学习1-点云和多边形面片文件的处理
  13. SSM(Spring+SpringMVC+Mybatis) 整合
  14. android 多渠道打包不同的包名、应用名、应用图标
  15. 电脑误删wps文件怎么恢复?介绍4个解决方法
  16. 问题 K: 蜗牛1534
  17. 网络安全 01 - Session Fixation
  18. javascript 打印错误信息 catch err
  19. 淘宝API淘口令真实url
  20. 数码摄影重要流程——ISP

热门文章

  1. db_mysql.so_MySQL登陆时提示找不到到libmysqlclient.so.15
  2. knife4j--api请求参数不一致问题
  3. Doris之Bitmap 索引
  4. Kylin之Caused by :...The table :DWD_ORDER_INFO Dup key found
  5. Redis之 介绍和安装
  6. php 日志增强,php 日志扩展
  7. html5的video怎么把里面的控制器移出来_电动车突然不走了,但控制器和转把没坏,但车走电,这是怎么回事...
  8. 剑指offer面试题06. 从尾到头打印链表(辅助栈法)
  9. 类和对象编程(七):this指针
  10. SharpDevelop--一款很不错的.NET开发工具