Numpy 遍历数组
发布时间:2023-07-01 15:11:30 所属栏目:教程 来源:
导读:Numpy 提供了一个迭代器对象 numpy.nditer,能够实现灵活地访问一个或者多个数组元素,达到遍历数组的目的。
1. 数组元素访问
1.1 按照内存布局打印数组元素
在默认情况下,numpy.nditer 迭代器返回的元素顺序,
1. 数组元素访问
1.1 按照内存布局打印数组元素
在默认情况下,numpy.nditer 迭代器返回的元素顺序,
Numpy 提供了一个迭代器对象 numpy.nditer,能够实现灵活地访问一个或者多个数组元素,达到遍历数组的目的。 1. 数组元素访问 1.1 按照内存布局打印数组元素 在默认情况下,numpy.nditer 迭代器返回的元素顺序,是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先。 例如,我们对于新创建的 2×3 的数组,利用 nditer 迭代器进行顺序访问: arr = np.arange().reshape(,) arr Out: array([[, , ], [, , ]]) for i in np.nditer(arr):print(i, end= ) 可以看到,在不增加其他设置的情况下,默认的打印顺序是行序优先(即 C-order)。 在不改变内部布局的情况下,通过该方式进行遍历,并不会改变顺序,例如我们通过迭代上述数组的转置来证明这一点。 for i in np.nditer(arr.T):print(i, end= ) 从上述结果可以看出,转置方法并未改变数组元素的存储顺序。 相对应的,我们利用 copy 方法,显式地更改内存顺序,nditer 迭代器的遍历解雇也会发生响应的变化: for i in np.nditer(arr.T.copy(C)):print(i, end= ) 1.2 控制遍历顺序 如果想要改变遍历的顺序,一种是上面案例中提到的,利用 copy 方法来修改内存顺序。当然,nditer 也提供了 order 参数来达到同样的目的。 C order,即是行序优先,跟默认的遍历顺序一致。 print ('以 C 风格顺序排序:')for i in np.nditer(arr, order=C):print(i, end= ) print ('以 F 风格顺序排序:')for i in np.nditer(arr, order=F):print(i, end= ) 2. 数组元素修改 nditer 对象有另一个可选参数 op_flags。 默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only 的模式。 在遍历的时候,对数组进行平方计算,生成一个特殊的平方方阵。 arr1 = np.arange().reshape(,) arr1 Out:array([[ , , , ], [ , , , ], [ , , , ], [, , , ]]) # 指定读写模式for i in np.nditer(arr1, op_flags=[readwrite]):i[...] = i** arr1 Out:array([[ , , , ], [ , , , ], [ , , , ], [, , , ]]) 在读写模式下,arr1 数组发生了变化。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |