numpy中函数nditer的作用

numpy中nditer函数用法


转载自:点击打开链接


迭代对象nditer提供了一种灵活访问一个或者多个数组的方式。

单个数组的迭代(Single Array Iteration)

迭代器最基本的任务的可以完成对数组元素的访问,迭代器接口可以一个接一个地提供的每一个元素。

例如:

[python]  view plain  copy
  1. a = np.arange(6).reshape(23)  
  2. for x in np.nditer(a):  
  3.     print x, " "  
  4. 0  1  2  3  4  5    
对于这种迭代方式需要注意的是:所选择的顺序是和数组内存布局一致的,而不是使用标准C或者Fortran顺序。这是为了使用效率而设计的,这反映了默认情况下只需访问每个元素,而无需考虑其特定顺序。我们可以通过迭代上述数组的转置来看到这一点,并与以C顺序访问 数组转置的copy 的方式做对比,有:

[python]  view plain  copy
  1. a = np.arange(6).reshape(23)  
  2. for x in np.nditer(a.T):  
  3.     print x,  
  4. print "\n"  
  5. for x in np.nditer(a.T.copy(order = 'C')):  
  6.     print x,   
  7.   
  8. 0 1 2 3 4 5   
  9.   
  10. 0 3 1 4 2 5  

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

控制迭代顺序(Controlling Iteration Order)

有时候,无论元素在内存中的分布如何,重要的是要以特定的顺序来访问数组。所以nditer提供了一种顺序参数(order parameter 的方法来实现这一要求。默认情况下是order = 'K', 就是上述的访问方式。另外有:order = 'C'和order = 'F'。不妨理解为:C是按行访问,F是按列访问。

[python]  view plain  copy
  1. a = np.arange(6).reshape(23)  
  2. for x in np.nditer(a, order = 'F'):  
  3.     print x,  
  4. print "\n"  
  5. for x in np.nditer(a.T, order = 'C'):  
  6.     print x,   
  7.   
  8. 0 3 1 4 2 5   
  9.   
  10. 0 3 1 4 2 5  


修改数组值(Modify Array Values)
默认情况下,nditer将输入数组视为 只读对象 。要修改数组元素,必须指定读写(  read-write )或只写( write-only) 模式。这是由每个 操作数标志 控制的。一般而言,Python中的赋值只需更改本地或全局变量字典中的引用,而不是修改现有变量。

[python]  view plain  copy
  1. a = np.arange(6).reshape(23)  
  2. print a  
  3.   
  4. for x in np.nditer(a, op_flags = ['readwrite']):  
  5.     x[...] = 2*x  
  6.   
  7. print a  
  8.   
  9. [[0 1 2]  
  10.  [3 4 5]]  
  11. [[ 0  2  4]  
  12.  [ 6  8 10]]  

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值