numpy中函数nditer的作用
numpy中nditer函数用法
转载自:点击打开链接
迭代对象nditer提供了一种灵活访问一个或者多个数组的方式。
单个数组的迭代(Single Array Iteration)
迭代器最基本的任务的可以完成对数组元素的访问,迭代器接口可以一个接一个地提供的每一个元素。
例如:
[python] view plain copy
- a = np.arange(6).reshape(2, 3)
- for x in np.nditer(a):
- print x, " "
- 0 1 2 3 4 5
[python] view plain copy
- a = np.arange(6).reshape(2, 3)
- for x in np.nditer(a.T):
- print x,
- print " "
- 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是按列访问。
[python] view plain copy
- a = np.arange(6).reshape(2, 3)
- for x in np.nditer(a, order = "F"):
- print x,
- print " "
- for x in np.nditer(a.T, order = "C"):
- print x,
- 0 3 1 4 2 5
- 0 3 1 4 2 5
默认情况下,nditer将输入数组视为只读对象。要修改数组元素,必须指定读写( read-write)或只写(write-only)模式。这是由每个操作数标志控制的。一般而言,Python中的赋值只需更改本地或全局变量字典中的引用,而不是修改现有变量。
[python] view plain copy
- 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]]
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。