NumPy 陣列迭代
迭代陣列
迭代意味著逐個遍歷元素。
由於我們在 numpy 中處理多維陣列,我們可以使用基本的 Python for
迴圈來完成此操作。
如果我們對一維陣列進行迭代,它將逐個遍歷每個元素。
迭代二維陣列
在二維陣列中,它將遍歷所有行。
示例
迭代以下二維陣列的元素
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr
print(x)
自己動手試一試 »
如果我們對 *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)
自己動手試一試 »
以不同的步長迭代
我們可以使用篩選器,然後進行迭代。
示例
迭代二維陣列的每個標量元素,跳過 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()
方法可用於這些用例。
示例
列舉以下一維陣列的元素
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)
自己動手試一試 »