HOWTO · NumPy

在 NumPy 中向矩陣新增行

本教程演示瞭如何在 numpy 中向矩陣新增行。

本頁內容

NumPy 矩陣是二維陣列。若要新增一列,請為每個欄提供一個值,並沿著 axis 0 合併該列。直接垂直堆疊可使用 numpy.vstack();若程式更適合使用陣列合併操作,也可以選擇 numpy.append() 或 numpy.concatenate()。這些操作都會回傳新陣列;若要保留結果,請將它指派給變數。

以下範例使用有三個欄的矩陣,並新增 [7, 8, 9]。每個範例都會印出結果陣列,讓你看到新增的列。

使用 numpy.vstack() 新增一列

numpy.vstack() 會垂直堆疊陣列。新增的列可用一維陣列傳入;這個方法會回傳一個新陣列,並將該列放在底部。

執行以下範例:

import numpy as np

matrix = np.array([[1, 2, 3],
                   [4, 5, 6]])
new_row = np.array([7, 8, 9])

result = np.vstack((matrix, new_row))
print(result)

原始的 matrix 不會改變;新增的列會出現在 result 中。新列必須有三個值,才能符合矩陣的欄數。若要新增多列,請將二維的列陣列傳給 numpy.vstack()。

使用 numpy.append() 新增一列

使用 numpy.append() 時,將 axis=0 設為沿著列的維度附加。在此範例中,新列是形狀為 (1, 3) 的二維陣列,與矩陣的二維結構及三個欄相符。

import numpy as np

matrix = np.array([[1, 2, 3],
                   [4, 5, 6]])
new_row = np.array([[7, 8, 9]])

result = np.append(matrix, new_row, axis=0)
print(result)

numpy.append() 會回傳新陣列,不會直接修改 matrix。如上例所示,請指派回傳值,才能使用附加列後的陣列。設定 axis=0 時,陣列的欄數必須相同;若傳入形狀相容的二維陣列,也可以一次附加多列。若要對大型陣列反覆新增列,可以先收集所有列,再一次合併,因為每次附加都會建立結果陣列。

使用 numpy.concatenate() 和 numpy.r_ 合併列

numpy.concatenate() 會沿著既有的軸合併陣列。若要新增列,請使用 axis=0,並確認每個輸入陣列的欄數相同。這是通用的陣列合併操作,因此也適用於合併兩個以上且彼此相容的陣列。

import numpy as np

matrix = np.array([[1, 2, 3],
                   [4, 5, 6]])
new_row = np.array([[7, 8, 9]])

result = np.concatenate((matrix, new_row), axis=0)
print(result)

numpy.r_ 是特殊的索引物件,不是函式呼叫。在這個情境中,它能以簡潔的方式逐列合併陣列:

import numpy as np

matrix = np.array([[1, 2, 3],
                   [4, 5, 6]])
new_row = np.array([[7, 8, 9]])

result = np.r_[matrix, new_row]
print(result)

若要清楚表達垂直堆疊的意圖,請選擇 numpy.vstack();若要明確指定軸,或合併一連串陣列,則可使用 numpy.concatenate()。簡單合併時,numpy.r_ 是精簡的替代方式。

使用 numpy.insert() 在指定位置插入一列

若新列要放在現有列之間,請使用 numpy.insert()。它的 obj 引數會指定插入位置:索引 1 會將新列放在目前第二列之前。設定 axis=0,即可沿著列的維度插入。

import numpy as np

matrix = np.array([[1, 2, 3],
                   [4, 5, 6]])
new_row = [7, 8, 9]

result = np.insert(matrix, 1, new_row, axis=0)
print(result)

若要在最後一列之後插入,請將目前的列數作為位置。對二維陣列而言,.shape 是一個屬性,其第一個值就是列數:

import numpy as np

matrix = np.array([[1, 2, 3],
                   [4, 5, 6]])
new_row = [7, 8, 9]

position = matrix.shape[0]
result = np.insert(matrix, position, new_row, axis=0)
print(result)

與其他方法相同,numpy.insert() 會回傳新陣列。請保留這個結果,或將它指派回 matrix;原始陣列不會被修改。以上四種方法新增的列,都必須與現有列具有相同的欄數。