若条件不满足,抛出 "ValueError: frames are not aligned" 异常。
NumPy 迭代数组
NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。
迭代器最基本的任务的可以完成对数组元素的访问。
接下来我们使用 arange() 函数创建一个 2X3 数组,并使用 nditer 对它进行迭代。
import numpy as npa = np.arange(6).reshape(2,3)print ('原始数组是:')print (a)print ('\n')print ('迭代输出元素:')for x in np.nditer(a):print (x, end=", " )print ('\n')
输出结果为:
原始数组是:[[012] [345]]迭代输出元素:0,1,2,3,4,5,
以上实例不是使用标准 C 或者 Fortran 顺序,选择的顺序是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先(row-major order,或者说是 C-order)。
这反映了默认情况下只需访问每个元素,而无需考虑其特定顺序。我们可以通过迭代上述数组的转置来看到这一点,并与以 C 顺序访问数组转置的 copy 方式做对比,如下实例:
import numpy as npa = np.arange(6).reshape(2,3)for x in np.nditer(a.T):print (x, end=", " )print ('\n')for x in np.nditer(a.copy(order='C')):print (x, end=", " )print ('\n')for x in np.nditer(a.T.copy(order='C')):print (x, end=", " )print ('\n')
import numpy as np a = np.arange(0,60,5)a = a.reshape(3,4)print ('原始数组是:')print (a)print ('\n')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=", " )
输出结果为:
原始数组是:[[ 051015] [20253035] [40455055]]以 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,
import numpy as np a = np.arange(0,60,5)a = a.reshape(3,4)print ('原始数组是:')print (a)print ('\n')print ('修改后的数组是:')for x in np.nditer(a, flags = ['external_loop'], order ='F'):print (x, end=", " )