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 清單) 中等 中等
巢狀迴圈 動態資料產生 高 可變