NumPy 数组迭代
迭代数组
迭代意味着逐个遍历元素。
在 NumPy 中,我们处理多维数组,可以使用 Python 的基本 for
循环来实现这一点。
如果我们迭代一个一维数组,它将逐个遍历每个元素。
迭代二维数组
在二维数组中,它将遍历所有行。
如果我们迭代一个 n 维数组,它将逐个遍历 n-1 维。
要返回实际值(标量),我们必须迭代每个维度中的数组。
示例
迭代二维数组的每个标量元素
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr
for y in x
print(y)
动手试试 »
迭代三维数组
在三维数组中,它将遍历所有二维数组。
示例
迭代以下三维数组的元素
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
for x in arr
print(x)
动手试试 »
要返回实际值(标量),我们必须迭代每个维度中的数组。
示例
迭代到标量
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
for x in arr
for y in x
for z in y
print(z)
动手试试 »
使用 nditer() 迭代数组
函数 nditer()
是一个辅助函数,可以用于从非常基本到非常高级的迭代。它解决了一些我们在迭代中遇到的基本问题,让我们通过示例来了解它。
迭代每个标量元素
在基本 for
循环中,要遍历数组的每个标量,我们需要使用 n 个 for
循环,对于维度非常高的数组来说,编写起来可能很困难。
示例
迭代以下三维数组
import numpy as np
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
for x in np.nditer(arr)
print(x)
动手试试 »
迭代不同数据类型的数组
我们可以使用 op_dtypes
参数并传递预期的类型,以更改迭代时元素的数据类型。
NumPy 不会就地更改元素的数据类型(元素在数组中的位置),因此它需要一些额外的空间来执行此操作,这个额外空间被称为缓冲区,为了在 nditer()
中启用它,我们传递 flags=['buffered']
。
示例
以字符串形式迭代数组
import numpy as np
arr = np.array([1, 2, 3])
for x in np.nditer(arr, flags=['buffered'], op_dtypes=['S'])
print(x)
动手试试 »
使用不同的步长迭代
我们可以使用过滤,然后进行迭代。
示例
跳过一个元素,迭代二维数组的每个标量元素
import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for x in np.nditer(arr[:, ::2])
print(x)
动手试试 »
使用 ndenumerate() 进行枚举迭代
枚举意味着逐个列出事物的序号。
有时我们在迭代时需要元素的对应索引,ndenumerate()
方法可以用于这些用例。
示例
枚举以下一维数组的元素
import numpy as np
arr = np.array([1, 2, 3])
for idx, x in np.ndenumerate(arr)
print(idx, x)
动手试试 »
示例
枚举以下二维数组的元素
import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for idx, x in np.ndenumerate(arr)
print(idx, x)
动手试试 »