NumPy 迭代数组学习笔记

迭代函数

NumPy包含一个迭代器对象numpy.nditer。它是一个有效的多维迭代器对象,可以用来对数组进行迭代。该迭代器对象具有诸如C语言、Fortran等底层序列迭代器的许多好处。

numpy.nditer的基本语法

pythonCopy Code
numpy.nditer(arrays, flags=['buffered'], op_flags=['readwrite'])
  • arrays:要迭代的数组。
  • flags:可以包括零个或多个以下值:
    • c_index:可以通过索引使用C顺序进行迭代。
    • f_index:可以通过索引使用Fortran顺序进行迭代。
    • multi-index:每次迭代可以同时按照单个索引和多个索引。
    • external_loop:给出的值是具有多个值的一维数组,而不是零维数组。
    • buffered:缓存底层内存,提供更好的性能。
  • op_flags:可以包括零个或多个以下值:
    • readwrite:数组是可读写的。
    • readonly:数组是只读的。
    • writeonly:数组是只写的。

示例

pythonCopy Code
import numpy as np a = np.array([1, 2, 3]) for x in np.nditer(a): print(x)

输出结果:

Copy Code
1 2 3

广播迭代

如果要在两个形状不同的数组上进行迭代,NumPy广播迭代可以用来处理这种情况。这是一种隐式扩展数组操作,它可以将较小的数组广播到与另一个较大的数组具有相同的形状。

示例

pythonCopy Code
import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 使用广播迭代将两个数组进行迭代 for x, y in np.nditer([a, b]): print(x, y)

输出结果:

Copy Code
1 4 2 5 3 6

ndenumerate 函数

可以使用ndenumerate函数来同时迭代索引和元素值。

示例

pythonCopy Code
import numpy as np a = np.array([1, 2, 3]) for index, x in np.ndenumerate(a): print(index, x)

输出结果:

Copy Code
(0,) 1 (1,) 2 (2,) 3

参考文献