1、基本使用

import numpy as np"""
NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。
迭代器最基本的任务的可以完成对数组元素的访问。
"""
a = np.arange(6).reshape(2,3)
print ('原始数组是:')
print (a)
print ('迭代输出元素:')
for x in np.nditer(a):print (x, end=", " )
print("\n ")
"""
原始数组是:
[[0 1 2][3 4 5]]
迭代输出元素:
0, 1, 2, 3, 4, 5, 以上实例不是使用标准 C 或者 Fortran 顺序,选择的顺序是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先(row-major order,或者说是 C-order)。
"""
# 我们可以通过迭代上述数组的转置来看到这一点,并与以 C 顺序访问数组转置的 copy 方式做对比,如下实例:
a = np.arange(6).reshape(2, 3)
for x in np.nditer(a.T):print(x, end=", ")  # 0, 1, 2, 3, 4, 5,
print('\n')for x in np.nditer(a.T.copy(order='C')):print(x, end=", ")  # 0, 3, 1, 4, 2, 5,
print('\n')print(a.T)
print(a.T.copy(order='C'))
"""
[[0 3][1 4][2 5]]
[[0 3][1 4][2 5]]从上述例子可以看出,a 和 a.T 的遍历顺序是一样的,也就是他们在内存中的存储顺序也是一样的,但是 a.T.copy(order = 'C') 的遍历结果是不同的,那是因为它和前两种的存储方式是不一样的,默认是按行访问。
"""

2、控制遍历顺序

for x in np.nditer(a, order=‘F’):Fortran order,即是列序优先;
for x in np.nditer(a.T, order=‘C’):C order,即是行序优先;
方式一、使用copy

a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('原始数组是:')
print (a)
print ('原始数组的转置是:')
b = a.T
print (b)
print ('以 C 风格顺序排序:')
c = b.copy(order='C')
print (c)
for x in np.nditer(c):print (x, end=", " )
print  ('\n')
print  ('以 F 风格顺序排序:')
c = b.copy(order='F')
print (c)
for x in np.nditer(c):print (x, end=", " )
"""
原始数组是:
[[ 0  5 10 15][20 25 30 35][40 45 50 55]]
原始数组的转置是:
[[ 0 20 40][ 5 25 45][10 30 50][15 35 55]]
以 C 风格顺序排序:
[[ 0 20 40][ 5 25 45][10 30 50][15 35 55]]
0, 20, 40, 5, 25, 45, 10, 30, 50, 15, 35, 55, 以 F 风格顺序排序:
[[ 0 20 40][ 5 25 45][10 30 50][15 35 55]]
0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55,
"""

方式二、显式设置,强制 nditer 对象使用某种顺序

# 可以通过显式设置,来强制 nditer 对象使用某种顺序:
a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('原始数组是:')
print (a)
print ('以 C 风格顺序排序:')
for x in np.nditer(a, order =  'C'):print (x, end=", " )
print ('\n')
print ('以 F 风格顺序排序:')
for x in np.nditer(a, order =  'F'):print (x, end=", " )"""
原始数组是:
[[ 0  5 10 15][20 25 30 35][40 45 50 55]]
以 C 风格顺序排序:
0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 以 F 风格顺序排序:
0, 20, 40, 5, 25, 45, 10, 30, 50, 15, 35, 55,
"""

3、修改数组中元素的值

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

a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('原始数组是:')
print (a)
print ('\n')
for x in np.nditer(a, op_flags=['readwrite']):x[...]=2*x
print ('修改后的数组是:')
print (a)
"""
原始数组是:
[[ 0  5 10 15][20 25 30 35][40 45 50 55]]
修改后的数组是:
[[  0  10  20  30][ 40  50  60  70][ 80  90 100 110]]
"""

4、广播迭代

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

a = np.arange(0,60,5)
a = a.reshape(3,4)
print  ('第一个数组为:')
print (a)
print  ('\n')
print ('第二个数组为:')
b = np.array([1,  2,  3,  4], dtype =  int)
print (b)
print ('\n')
print ('修改后的数组为:')
for x,y in np.nditer([a,b]):print ("%d:%d"  %  (x,y), end=", " )
"""第一个数组为:
[[ 0  5 10 15][20 25 30 35][40 45 50 55]]
第二个数组为:
[1 2 3 4]
修改后的数组为:
0:1, 5:2, 10:3, 15:4, 20:1, 25:2, 30:3, 35:4, 40:1, 45:2, 50:3, 55:4, """

https://www.runoob.com/numpy/numpy-terating-over-array.html

python3-numpy np.nditer 迭代数组、np.nditer修改数组、np.nditer广播迭代相关推荐

  1. B10_NumPy数组操作、修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除

    NumPy数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resha ...

  2. java改变数组长度_Java修改数组长度

    java中没有关于修改数组长度的api,在此本人提供了修改数组长度的两个函数:arrayAddLength()和arrayReduceLength().详细见代码. [java] view plain ...

  3. js基础(数组)--数组类型、类数组对象、作为数组的字符串

    1.数组类型 我们到处都可以看见数组是具有特殊行为的对象.给定一个未知的对象,判定它是否为数组通常非常 有用.在ECMAScript 5中,可以使用Array.isArray()函数来做这件事情:Ar ...

  4. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))     二维数组(二维数组的遍历.排序.查找.定义 ...

  5. 修改数组相应位置元素——splice()

    版权声明:本文为博主原创文章,未经博主允许不得转载. splice()--所有主流浏览器都支持 splice() 方法. 定义和用法 splice() 方法向/从数组中**添加/删除**项目,然后返回 ...

  6. python使用numpy中的flatten函数将2D numpy数组拉平为1Dnumpy数组、使用np.linalg.matrix_rank函数计算2D numpy数组的秩(rank)

    python使用numpy中的flatten函数将2D numpy数组拉平为1Dnumpy数组.使用np.linalg.matrix_rank函数计算2D numpy数组的秩(rank) 目录

  7. python使用numpy的np.float_power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数返回浮点数

    python使用numpy的np.float_power函数计算numpy数组中每个数值的指定幂次(例如平方.立方).np.power函数默认返回整数格式.np.float_power函数默认返回浮点 ...

  8. python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数默认返回浮点数

    python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方.立方).np.power函数默认返回整数格式.np.float_power函数默认返回浮点数 目录

  9. python3 numpy中矩阵np.dot(a,b)乘法运算

    python np.dot(a,b)乘法运算 首先我们知道矩阵运算是不满足交换律的,np.dot(a, b)与np.dot(b, a)是不一样的 另外np.dot(a,b)和a.dot(b)果是一样的 ...

最新文章

  1. Http和Https对比
  2. Cassandra 单机入门例子——有索引
  3. 二叉树中如何求根节点到任意节点的路径?
  4. stm32f103c8t6掉坑记
  5. 2019牛客暑期多校训练营(第七场)
  6. boost::local_time模块实现创建各种dst_calc_rule的测试程序
  7. Swift5之网易云音乐页面搭建
  8. 股票开盘的最大成交额-----一道不错的贪心算法题目
  9. 扁平图文列表小程序模板
  10. jQuery实现一个优雅的返回顶部
  11. 无线蓝牙耳机i12充电_2019年TWS新趋势:8大品牌新款真无线蓝牙耳机支持无线充电...
  12. WCF把书读薄(4)——事务编程与可靠会话
  13. 安装sun-java5-jdk 提示无法找到软件包sun-java5-jdk
  14. 数建--LINGO软件介绍
  15. 奥克兰大学计算机专业好找工作吗,留学选择奥克兰大学的计算机专业肯定不会后悔...
  16. c++ 优先队列(priority_queue)
  17. 【STL】STL函数总结,助你代码实用高逼格
  18. 本科课程【计算机网络】实验2 - 交换机的VLAN配置实验
  19. 若依(RuoYi)配置教程
  20. 弘玑Cyclone联合北京大学共建中国首个超级自动化校企联合实验室

热门文章

  1. 栈、队列 java代码实现
  2. html中怎样实现在输入框中出现提示
  3. 想要成为真正优秀的程序员是不是真的很难?
  4. Snowflake核心技术解读系列——架构设计
  5. 日志服务Dashboard加速
  6. 一种命令行解析的新思路(Go 语言描述)
  7. 如何落地云原生DevOps?
  8. 一针一线皆关“云” 报喜鸟以匠心融合科技
  9. 企业主机安全面临的三大风险如何解?
  10. C语言动态内存管理和动态内存分配