NumPy 陣列迭代
NumPy 陣列迭代是訪問和處理陣列元素的重要方法。它允許您逐個或成組地遍歷陣列元素。
基本迭代
我們可以使用 Python 的基本 for
迴圈來迭代 NumPy 陣列。
一維陣列迭代:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
for element in arr:
print(element)
二維陣列迭代:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
for row in arr:
for element in row:
print(element)
多維陣列迭代:
對於更高維度的陣列,我們可以使用巢狀迴圈來迭代每個維度。
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
for cube in arr:
for row in cube:
for element in row:
print(element)
使用 nditer()
進行高階迭代
NumPy 提供了 np.nditer()
函式,用於更復雜的迭代操作。它允許您:
指定迭代順序:order
引數可以是 'C'
(行優先)或 'F'
(列優先)。
過濾元素:flags
引數可以包含 'filtering'
和 'slicing'
等標誌,用於過濾元素。
轉換資料型別:op_dtypes
引數可以指定迭代過程中元素的資料型別。
使用步長:axes
和 step
引數可以用於指定迭代步長。
示例:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 迭代每個元素,並將其轉換為字串
for element in np.nditer(arr, op_dtypes=['S']):
print(element)
示例:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 迭代行,跳過第一個元素
for row in np.nditer(arr[:, 1:], flags=['slicing']):
print(row)
示例:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 迭代列,每隔一個元素
for column in np.nditer(arr[:, ::2], flags=['slicing']):
print(column)
使用 ndenumerate()
進行列舉迭代
np.ndenumerate()
函式將每個元素與其索引一起返回。
示例:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for (row_idx, col_idx), element in np.ndenumerate(arr):
print(f"({row_idx}, {col_idx}): {element}")
練習
使用 NumPy 陣列迭代完成以下任務:
- 建立一個 3x3 的二維陣列,並列印每個元素。
- 建立一個 5x5x5 的三維陣列,並列印每個元素的座標和值。
- 建立一個 10 個元素的一維陣列,並計算陣列元素的平均值。
- 建立一個 2x2 的二維陣列,並將其轉置(行列互換)。
- 建立一個 3x4 的二維陣列,並沿第 1 軸(行)堆疊兩個這樣的陣列。
在評論中分享您的程式碼和輸出。
Sure, here is the requested Markdown formatted content:
NumPy 合併陣列
NumPy 提供了多種函式來合併陣列,用於將多個陣列的內容連線成一個新陣列。
合併陣列
np.concatenate()
函式用於沿指定軸連線多個陣列。
語法:
np.concatenate((arr1, arr2, ..., arrN), axis=None)
arr1, arr2, ..., arrN
: 要合併的陣列。
axis
: 指定連線的軸。預設為 0。
示例:
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 合併兩個一維陣列
arr = np.concatenate((arr1, arr2))
print(arr) # 輸出: [1 2 3 4 5 6]
# 沿行合併兩個二維陣列
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.concatenate((arr1, arr2), axis=1)
print(arr) # 輸出: [[ 1 2 5 6]
# [ 3 4 7 8]]
堆疊陣列
np.stack()
函式用於沿新軸堆疊多個陣列。
語法:
np.stack((arr1, arr2, ..., arrN), axis=None)
arr1, arr2, ..., arrN
: 要堆疊的陣列。
axis
: 指定堆疊的軸。預設為 0。
示例:
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 沿第二軸堆疊兩個一維陣列
arr = np.stack((arr1, arr2), axis=1)
print(arr) # 輸出: [[1 4]
# [2 5]
# [3 6]]
# 沿行堆疊
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.stack((arr1, arr2), axis=0)
print(arr) # 輸出: [[1 2]
# [3 4]
# [5 6]
# [7 8]]
輔助函式
NumPy 提供了一些輔助函式來方便常見軸上的堆疊操作:
np.hstack()
:沿水平方向(行)堆疊陣列。
np.vstack()
:沿垂直方向(列)堆疊陣列。
np.dstack()
:沿第三軸(深度)堆疊陣列。
示例:
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 沿行堆疊
arr = np.hstack((arr1, arr2))
print(arr) # 輸出: [1 2 3 4 5 6]
# 沿列堆疊
arr = np.vstack((arr1, arr2))
print(arr) # 輸出: [[1 4]
# [2 5]
# [3 6]]
練習
使用 NumPy 的正確方法,將以下陣列 arr1
和 arr2
合併成一個新陣列。
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 期望輸出: [1 4 2 5 3 6]
在評論中分享您的程式碼和輸出。
最後
為了方便其他裝置和平臺的小夥伴觀看往期文章:
微信公眾號搜尋:Let us Coding
,關注後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關注