Numpy - 向数组添加行

248 投票
10 回答
770796 浏览
提问于 2025-04-16 05:08

如何向一个numpy数组添加行?

我有一个数组A:

A = array([[0, 1, 2], [0, 2, 0]])

我想从另一个数组X中添加行到这个数组,前提是X中每一行的第一个元素满足特定条件。

看起来numpy数组没有像列表那样的'append'方法。

如果A和X是列表,我只需要这样做:

for i in X:
    if i[0] < 3:
        A.append(i)

有没有什么的方法可以做到同样的事情呢?

谢谢,S ;-)

10 个回答

58

这个问题已经有7年了,我现在用的是numpy 1.13版本和python3。我在给一个矩阵添加一行的时候,记得在第二个参数上加上双括号,否则会出现维度错误。

在这里,我是在给矩阵A添加一行

1 2 3
4 5 6

用的是一行数据

7 8 9

np.r_中用法是一样的

A = [[1, 2, 3], [4, 5, 6]]
np.append(A, [[7, 8, 9]], axis=0)

    >> array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
#or 
np.r_[A,[[7,8,9]]]

如果有人感兴趣,想要添加一列的话,

array = np.c_[A,np.zeros(#A的行数)]

这和我们之前在矩阵A上做的事情一样,是在给它添加一列

np.c_[A, [2,8]]

>> array([[1, 2, 3, 2],
          [4, 5, 6, 8]])

如果你想把数据放在最前面,只需要把参数的顺序调换一下,比如:

np.r_([[7, 8, 9]], A)

    >> array([[7, 8, 9],
             [1, 2, 3],
             [4, 5, 6]])
255

你可以这样做:

newrow = [1, 2, 3]
A = numpy.vstack([A, newrow])
153

什么是 X? 如果它是一个二维数组,那你怎么能把它的某一行和一个数字比较,比如 i < 3 呢?

根据提问者的评论更新:

A = array([[0, 1, 2], [0, 2, 0]])
X = array([[0, 1, 2], [1, 2, 0], [2, 1, 2], [3, 2, 0]])

把所有第一元素小于 3X 的行添加到 A 中:

import numpy as np
A = np.vstack((A, X[X[:,0] < 3]))

# returns: 
array([[0, 1, 2],
       [0, 2, 0],
       [0, 1, 2],
       [1, 2, 0],
       [2, 1, 2]])

撰写回答