Numpy – 向数组添加行

如何将行添加到一个numpy数组?

我有一个数组A:

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

如果X中每一行的第一个元素满足特定条件,我希望从另一个数组X中向这个数组添加行。

Numpy数组没有像列表那样的“追加”方法,或者看起来如此。

如果A和X是列表,我只会做:

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

有没有一种numpythonic方式来做等效?

谢谢,S 😉

什么是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]]) 

添加到A所有行,其中第一个元素< 3

 A = vstack((A, X[X[:,0] < 3])) # returns: array([[0, 1, 2], [0, 2, 0], [0, 1, 2], [1, 2, 0], [2, 1, 2]]) 

那么你可以这样做:

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

你也可以这样做:

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

如果你可以在一个单独的操作中完成构build,那么类似vstack-fancy-indexing的答案就是一个很好的方法。 但是如果你的情况比较复杂,或者你的行在飞行中,你可能想要增长数组。 事实上,像这样做的numpythonic方式 – dynamic增长一个数组 – 是dynamic增长一个列表:

 A = np.array([[1,2,3],[4,5,6]]) Alist = [r for r in A] for i in range(100): newrow = np.arange(3)+i if i%5: Alist.append(newrow) A = np.array(Alist) del Alist 

列表针对这种访问模式进行了高度优化; 在列表forms中,您没有方便的numpy多维索引,但是只要您追加,就很难比行数组列表更好。

您可以使用numpy.append()将行添加到numpty数组,稍后重塑为matrix。

 import numpy as np a = np.array([1,2]) a = np.append(a, [3,4]) print a # [1,2,3,4] # in your example A = [1,2] for row in X: A = np.append(A, row)