前言:
眼前我们对“python多维数组遍历”都比较注意,朋友们都需要学习一些“python多维数组遍历”的相关文章。那么小编同时在网摘上搜集了一些关于“python多维数组遍历””的相关知识,希望我们能喜欢,你们快快来学习一下吧!NumPy提供了迭代器对象NumPy.nditer,是一个高效的多维迭代器对象,可以使用它对数组进行迭代,使用Python的标准迭代器接口访问数组元素。
示例
import numpy as np a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]]) print("打印数组:") print(a); print("\n") print("数组迭代:") for x in np.nditer(a): print(x, end=' ') print("\n")
输出
打印数组:[[ 1 2 3 4] [ 2 4 5 6] [10 20 39 3]]数组迭代:1 2 3 4 2 4 5 6 10 20 39 3
我们知道,numpy中的数组排序有两种:
F(Fortran)风格顺序,列排序C(C语言)风格顺序,行排序
默认情况下,迭代顺序通常受数组的内存布局影响,不受特定的数组排序(C风格顺序/F风格顺序)影响。
可以看一下把上面示例中的数组转置后,对其进行迭代时的顺序。
示例
比较数组及其转置数组的迭代顺序:
import numpy as np a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]]) print("打印数组:") print(a) print("\n") print("打印数组的转置:") at = a.T print(at) print("\n数组迭代:")for x in np.nditer(a): print(x, end=' ') print("\n") print("\n转置的数组迭代:")for x in np.nditer(at): print(x, end=' ') print("\n")
输出
打印数组:[[ 1 2 3 4] [ 2 4 5 6] [10 20 39 3]]打印数组的转置:[[ 1 2 10] [ 2 4 20] [ 3 5 39] [ 4 6 3]]数组迭代:1 2 3 4 2 4 5 6 10 20 39 3转置的数组迭代:1 2 3 4 2 4 5 6 10 20 39 3
可以看到,这两个迭代顺序是一样的,转置没有影响迭代顺序。
迭代顺序
要强制按F排序或C排序的顺序迭代数组,可在创建迭代对象时显式指定。
示例
import numpy as np a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]]) print("\n打印数组:\n") print(a) print("\n打印数组的转置:\n") at = a.T print(at) print("\n迭代转置后的数组\n") for x in np.nditer(at): print(x, end= ' ') print("\n按C风格顺序迭代数组:\n") for x in np.nditer(at, order = 'C'): print(x,end=' ')
输出
打印数组:[[ 1 2 3 4] [ 2 4 5 6] [10 20 39 3]]打印数组的转置:[[ 1 2 10] [ 2 4 20] [ 3 5 39] [ 4 6 3]]迭代转置后的数组1 2 3 4 2 4 5 6 10 20 39 3按C风格顺序迭代数组:1 2 10 2 4 20 3 5 39 4 6 3数组修改
迭代数组时,默认数组值不能修改,因为迭代对象的op-flag默认被设置为只读。如要可修改,可在创建迭代对象时,把op_flags设置为readwrite或write。
示例
import numpy as np a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]]) print("\n打印原始数组:\n") print(a) print("\n遍历修改后的数组:\n") for x in np.nditer(a, op_flags = ['readwrite']): x[...] = 3 * x; print(x,end = ' ')
输出
打印原始数组:[[ 1 2 3 4] [ 2 4 5 6] [10 20 39 3]]遍历修改后的数组:3 6 9 12 6 12 15 18 30 60 117 9广播迭代
如果两个数组是可广播的,可以使用组合的nditer对象对它们进行并发迭代。假设一个数组a的维数为3X4,而另一个数组b的维数为1X4,可使用以下类型的迭代器(将数组b广播到a的大小)。
示例
import numpy as np a = np.arange(0,60,5) a = a.reshape(3,4) print ('数组a:') print (a) print ('\n') print ('数组b:') b = np.array([1, 2, 3, 4], dtype = int) print (b) print ('\n') print ('同时迭代2个可广播的数组:')for x,y in np.nditer([a,b]): print ("%d:%d" % (x,y))
输出
数组a:[[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]数组b:[1 2 3 4]同时迭代2个可广播的数组:0:15:210:315:420:125:230:335:440:145:250:355:4
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #python多维数组遍历