如何向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)
有没有一种numpythonic方法来做同样的事情?
谢谢, 年代;-)
如何向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)
有没有一种numpythonic方法来做同样的事情?
谢谢, 年代;-)
当前回答
你还可以这样做:
newrow = [1,2,3]
A = numpy.concatenate((A,newrow))
其他回答
您可以使用numpy.append()将一行附加到numpty数组中,并稍后将其重塑为矩阵。
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)
import numpy as np
array_ = np.array([[1,2,3]])
add_row = np.array([[4,5,6]])
array_ = np.concatenate((array_, add_row), axis=0)
我使用numpy。插入(arr, i, the_object_to_be_added, axis),以便在第i行(轴=0)或第i列(轴=1)插入object_to_be_added
import numpy as np
a = np.array([[1, 2, 3], [5, 4, 6]])
# array([[1, 2, 3],
# [5, 4, 6]])
np.insert(a, 1, [55, 66], axis=1)
# array([[ 1, 55, 2, 3],
# [ 5, 66, 4, 6]])
np.insert(a, 2, [50, 60, 70], axis=0)
# array([[ 1, 2, 3],
# [ 5, 4, 6],
# [50, 60, 70]])
太旧的讨论了,但我希望它能帮助到一些人。
X是多少?如果它是一个2d数组,那么如何将它的行与一个数字进行比较:i < 3?
OP评论后编辑:
A = array([[0, 1, 2], [0, 2, 0]])
X = array([[0, 1, 2], [1, 2, 0], [2, 1, 2], [3, 2, 0]])
将X中第一个元素< 3的所有行添加到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]])
如果可以在一个操作中完成构造,那么vstack-with-fancy-indexing之类的方法是一种很好的方法。但是如果你的情况更复杂,或者你的行是动态的,你可能想要增加数组。实际上,动态增长一个数组的numpythonic方法是动态增长一个列表:
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
列表针对这种访问模式进行了高度优化;在列表形式下没有方便的numpy多维索引,但只要追加,就很难比行数组列表做得更好。