arange和range

range返回从0到4的5个数构成的list,而arange返回一个array对象。不过他们的元素都是一样的。在这里插入图片描述
迭代对象nditer提供了一种灵活访问一个或者多个数组的方式。

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

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

例如:

a = np.arange(6).reshape(2, 3)
for x in np.nditer(a):
    print x, " "
0  1  2  3  4  5  

对于这种迭代方式需要注意的是:所选择的顺序是和数组内存布局一致的,而不是使用标准C或者Fortran顺序。这是为了使用效率而设计的,这反映了默认情况下只需访问每个元素,而无需考虑其特定顺序。我们可以通过迭代上述数组的转置来看到这一点,并与以C顺序访问数组转置的copy的方式做对比,有:

a = np.arange(6).reshape(2, 3)
for x in np.nditer(a.T):
    print x,
print "\n"
for x in np.nditer(a.T.copy(order = 'C')):
    print x, 
 
0 1 2 3 4 5 
 
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是按列访问。

a = np.arange(6).reshape(2, 3)
for x in np.nditer(a, order = 'F'):
    print x,
print "\n"
for x in np.nditer(a.T, order = 'C'):
    print x, 
 
0 3 1 4 2 5 
 
0 3 1 4 2 5

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

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

原文链接:https://blog.csdn.net/Hearthougan/article/details/71281040

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值