NumPy - 数组上的迭代

NumPy 包包含一个迭代器对象numpy.nditer。 它是一个有效的多维迭代器对象,可以用于在数组上进行迭代。 数组的每个元素可使用 Python 的标准Iterator接口来访问。

广播迭代

如果两个数组是可广播的nditer组合对象能够同时迭代它们。 假设数组a具有维度 3X4,并且存在维度为 1X4 的另一个数组b,则使用以下类型的迭代器(数组b被广播到a的大小)。

代码举例

import numpy as np

a1 = np.arange(0, 60, 5).reshape(3, 4)
print(a1)
for x in np.nditer(a1):
print(x)
print(“-------------------------”)
# 迭代的顺序匹配数组的内容布局,而不考虑特定的排序
for x in np.nditer(a1.T):
print(x)
print(“-------------------------”)
# 以 C 风格顺序排序:
for x in np.nditer(a1.T.copy(order=‘C’)):
print(x)
print(“-------------------------”)
# 以 C 风格顺序排序:
for x in np.nditer(a1.T, order=‘C’):
print(x)
print(“-------------------------”)
# 以读写模式修改元素的值
for x in np.nditer(a1, op_flags=[‘readwrite’]):
x[…] = 2 * x
print(a1)
print(“-------------------------”)
‘’’
flags 参数
c_index 可以跟踪 C 顺序的索引
f_index 可以跟踪 Fortran 顺序的索引
multi-index 每次迭代可以跟踪一种索引类型
external_loop 给出的值是具有多个值的一维数组,而不是零维数组
‘’’
for x in np.nditer(a1, flags=[‘external_loop’], order=‘F’):
print(x)
print(“-------------------------”)
# 广播迭代
b = np.array([1, 2, 3, 4], dtype=int)
for x, y in np.nditer([a1, b]):
print(“%d:%d” % (x, y))

代码 Github地址:https://github.com/shadowagnoy/python_learn/

参考文档:https://docs.scipy.org/doc/numpy/reference/routines.html

参考文档:https://www.tutorialspoint.com/numpy/index.htm