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)