HOWTO · Python
如何在 Python 中追加二維陣列
學習如何使用原生清單和 NumPy 在 Python 中向二維陣列追加值。本指南涵蓋了 append()、extend()、numpy.append() 等方法,並附有針對列、欄和動態資料的範例。是資料操作和數值計算的理想之選!
本頁內容
在 Python 中向二維陣列追加值是資料操作、數值計算和資料科學應用中的常見操作。無論你使用的是原生 Python 清單,還是為了效率使用 NumPy,都有多種方法可以向二維陣列追加列、欄或單個值。本指南探討了不同的技術、它們的優勢和使用情境。
使用巢狀清單(Python 清單)
Python 的內建清單可以將二維陣列表示為清單的清單。追加值最簡單的方法是使用 append() 方法。
追加新列
array = [[1, 2, 3], [4, 5, 6]]
array.append([7, 8, 9])
print(array)
輸出:
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
此方法向現有清單加入一個全新的列。當你想透過隨時間加入更多資料來動態擴展二維清單時,append() 方法非常有用。不過請注意,為了處理結構化資料,所有列可能需要具有相同的長度。
向現有列追加值
array[0].append(10)
print(array)
輸出:
[[1, 2, 3, 10],
[4, 5, 6],
[7, 8, 9]]
此方法透過追加一個新元素來修改特定的列。與加入新列不同,此操作只影響指定的列,如果管理不當,可能會導致不規則的欄結構。
使用清單推導式
清單推導式提供了一種優雅的方式,可以在二維清單的所有列中追加值。
array = [[1, 2], [3, 4]]
array = [row + [5] for row in array]
print(array)
輸出:
[[1, 2, 5],
[3, 4, 5]]
此方法高效率地為每一列加入一個新欄。透過走訪每一列並追加一個值,清單推導式確保新欄在所有列中均勻加入。
使用 NumPy 陣列
NumPy 提供了強大的方法來高效率地處理二維陣列並向其追加值。但是,在處理包含許多空值的大型資料集時,使用稀疏矩陣可以顯著減少記憶體消耗。了解更多關於 [Python 中的稀疏矩陣]({{relref “/HowTo/Python/sparse matrix in python.en.md”}}) 以及它們如何最佳化儲存。
使用 numpy.append()
import numpy as np
array = np.array([[1, 2], [3, 4]])
array = np.append(array, [[5, 6]], axis=0)
print(array)
輸出:
[[1 2]
[3 4]
[5 6]]
此方法向 NumPy 陣列追加一個新列。numpy.append() 函式在處理大型資料集時非常有用,因為與原生 Python 清單相比,它能確保高效率的記憶體管理。
要追加新欄:
array = np.append(array, [[7], [8], [9]], axis=1)
print(array)
輸出:
[[1 2 7]
[3 4 8]
[5 6 9]]
追加值之後,你可能需要將修改後的陣列儲存到檔案中以備後用。你可以參閱我們的 [將陣列寫入文字檔]({{relref “/HowTo/Python/write array to a textfile.en.md”}}) 指南,了解高效率儲存 NumPy 陣列的詳細資訊。
如果在修改 NumPy 陣列時遇到索引錯誤,請參閱我們的 修正 ‘Too Many Indices for Array’ 錯誤 指南,以排查常見錯誤。
使用 numpy.hstack() 和 numpy.vstack()
NumPy 的 hstack() 和 vstack() 函式旨在高效率地追加欄和列。
使用 hstack() 追加欄
import numpy as np
array = np.array([[1, 2], [3, 4]])
new_column = np.array([[5], [6]])
result = np.hstack((array, new_column))
print(result)
輸出:
[[1 2 5]
[3 4 6]]
使用 vstack() 追加列
new_row = np.array([[5, 6]])
result = np.vstack((array, new_row))
print(result)
輸出:
[[1 2]
[3 4]
[5 6]]
這些方法高效率,並且在處理大型資料集時值得推薦。與可能需要重構整個陣列的 numpy.append() 不同,hstack() 和 vstack() 分別針對欄向和列向擴展進行了最佳化。
如果你處理的是結構化數值資料,你可能還需要轉置矩陣以便高效率地重塑資料。請查看我們的 在 Python 中轉置矩陣 一文。
使用 += 運算子
array = [[1, 2], [3, 4]]
array += [[5, 6]]
print(array)
輸出:
[[1, 2],
[3, 4],
[5, 6]]
此方法是 append() 的簡寫,但會就地修改清單。使用 += 可確保新列直接加入,而不建立新的參照,這使其成為處理小型二維清單的高效率方法。
使用 extend() 追加多列
array = [[1, 2], [3, 4]]
array.extend([[5, 6], [7, 8]])
print(array)
輸出:
[[1, 2],
[3, 4],
[5, 6],
[7, 8]]
這在一次加入多列時非常有用。extend() 方法在將來自不同來源的資料合併到單個二維清單中時特別有幫助。
如果你需要將更新後的清單儲存為 CSV 檔案,你可以查看我們的 在 Python 中將清單寫入 CSV 檔案 指南。
使用 insert() 在特定索引處加入列
array = [[1, 2], [3, 4]]
array.insert(1, [5, 6])
print(array)
輸出:
[[1, 2],
[5, 6],
[3, 4]]
insert() 方法允許在陣列內精確放置列。這在處理有序資料集時非常有用,因為新條目需要在不破壞整體結構的情況下插入到特定位置。
使用巢狀迴圈動態填入二維陣列
array = []
for i in range(3):
row = []
for j in range(2):
row.append(i * j)
array.append(row)
print(array)
輸出:
[[0, 0],
[0, 1],
[0, 2]]
此方法對於動態產生結構化二維陣列非常有用。使用巢狀迴圈可以完全控制資料的填入方式,這使其成為以程式設計方式產生矩陣和基於格線的結構的理想之選。
結論
Python 提供了多種向二維陣列追加值的方法。如果你使用的是標準清單,append()、extend() 和清單推導式都是有效的選擇。對於高效能數值運算,NumPy 的 append()、hstack() 和 vstack() 提供了最佳化的解決方案。正確的方法取決於你處理的是小型清單還是大規模數值資料。
方法對比
| 方法 | 適用場景 | 靈活性 | 效能 |
|---|---|---|---|
append() |
加入列(Python 清單) | 高 | 中等 |
list comprehension |
加入欄(Python 清單) | 中等 | 高 |
numpy.append() |
追加列/欄(NumPy) | 高 | 高 |
hstack() / vstack() |
高效率追加列/欄(NumPy) | 高 | 非常高 |
+= 運算子 |
快速追加列(Python 清單) | 低 | 高 |
extend() |
追加多列(Python 清單) | 中等 | 高 |
insert() |
在特定索引處插入(Python 清單) | 中等 | 中等 |
| 巢狀迴圈 | 動態資料產生 | 高 | 可變 |