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;原数组不会被修改。以上四种方法都要求新增行的列数与现有行相同。