NumPy 數組迭代

數組迭代

迭代意味著逐一遍歷元素。

當我們在 numpy 中處理多維數組時,可以使用 python 的基本 for 循環來完成此操作。

如果我們對 1-D 數組進行迭代,它將逐一遍歷每個元素。

實例

迭代以下一維數組的元素:

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

運行實例

迭代 2-D 數組

在 2-D 數組中,它將遍歷所有行。

實例

迭代以下二維數組的元素:

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr:
  print(x)

運行實例

如果我們迭代一個 n-D 數組,它將逐一遍歷第 n-1 維。

如需返回實際值、標量,我們必須迭代每個維中的數組。

實例

迭代 2-D 數組的每個標量元素:

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr:
  for y in x:
    print(y)

運行實例

迭代 3-D 數組

在 3-D 數組中,它將遍歷所有 2-D 數組。

實例

迭代以下 3-D 數組的元素:

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 循環,對于具有高維數的數組可能很難編寫。

實例

遍歷以下 3-D 數組:

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 不會就地更改元素的數據類型(元素位于數組中),因此它需要一些其他空間來執行此操作,該額外空間稱為 buffer,為了在 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)

運行實例

以不同的步長迭代

我們可以使用過濾,然后進行迭代。

實例

每遍歷 2D 數組的一個標量元素,跳過 1 個元素:

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() 方法。

實例

枚舉以下 1D 數組元素:

import numpy as np
arr = np.array([1, 2, 3])
for idx, x in np.ndenumerate(arr):
  print(idx, x)

運行實例

實例

枚舉以下 2D 數組元素:

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)

運行實例