numpy中nditer函数用法
转载自:点击打开链接
迭代对象nditer提供了一种灵活访问一个或者多个数组的方式。
单个数组的迭代(Single Array Iteration)
迭代器最基本的任务的可以完成对数组元素的访问,迭代器接口可以一个接一个地提供的每一个元素。
例如:
对于这种迭代方式需要注意的是:所选择的顺序是和数组内存布局一致的,而不是使用标准C或者Fortran顺序。这是为了使用效率而设计的,这反映了默认情况下只需访问每个元素,而无需考虑其特定顺序。我们可以通过迭代上述数组的转置来看到这一点,并与以C顺序访问 数组转置的copy 的方式做对比,有:
从上述例子可以看出,a和a.T的遍历顺序是一样的,也就是他们在内存中的存储顺序也是一样的,但是a.T.copy(order = 'C')的遍历结果是不同的,那是因为它和前两种的存储方式是不一样的。默认是按行访问。
控制迭代顺序(Controlling Iteration Order)有时候,无论元素在内存中的分布如何,重要的是要以特定的顺序来访问数组。所以nditer提供了一种顺序参数(order parameter )的方法来实现这一要求。默认情况下是order = 'K', 就是上述的访问方式。另外有:order = 'C'和order = 'F'。不妨理解为:C是按行访问,F是按列访问。
默认情况下,nditer将输入数组视为 只读对象 。要修改数组元素,必须指定读写( read-write )或只写( write-only) 模式。这是由每个 操作数标志 控制的。一般而言,Python中的赋值只需更改本地或全局变量字典中的引用,而不是修改现有变量。