import numpy as np a = np.arange(6).reshape(2,3) print ('原始数组是:') print (a) print ('\n') print ('迭代输出元素:') for x in np.nditer(a): print (x, end=", " ) print ('\n')
按顺序迭代
这反映了默认情况下只需访问每个元素,而无需考虑其特定顺序。我们可以通过迭代上述数组的转置来看到这一点,并与以 C 顺序访问数组转置的 copy 方式做对比,如下实例:
1 2 3 4 5 6 7 8 9 10
import numpy as np a = np.arange(6).reshape(2,3) for x in np.nditer(a.T): print (x, end=", " ) print ('\n') for x in np.nditer(a.T.copy(order='C')): print (x, end=", " ) print ('\n')
控制遍历顺序
for x in np.nditer(a, order='F'):Fortran order,即是列序优先; for x in np.nditer(a.T, order='C'):C order,即是行序优先
import numpy as np a = np.arange(0,60,5) a = a.reshape(3,4) print ('原始数组是:') print (a) print ('\n') print ('原始数组的转置是:') b = a.T print (b) print ('\n') 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=", " ) 输出结果为:
import numpy as np 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) 输出结果为:
原始数组是: [[ 051015] [20253035] [40455055]]
修改后的数组是: [[ 0102030] [ 40506070] [ 8090100110]]
广播迭代
广播迭代 如果两个数组是可广播的,nditer 组合对象能够同时迭代它们。 假设数组 a 的维度为 3X4,数组 b 的维度为 1X4 ,则使用以下迭代器(数组 b 被广播到 a 的大小)。