在numpy中使用for循环追加多行

时间:2014-02-02 20:02:44

标签: arrays loops for-loop numpy append

使用numpy数组,假设我有一个示例数组x

 [[ 10.   1.   1.   3.   0.   0.]
  [ 11.   1.   1.   3.   0.   0.]
  [ 13.   8.   3.  13.   0.   0.]
  [ 22.   4.   0.  23.   0.   0.]
  [ 32.   6.   0.   8.   0.   0.]
  [ 43.   9.   6.   3.   0.   0.]]

我有一个矢量,比方说,y

 [34. 56.]

如何使用for循环(或更快的东西?)将行添加到x后用零填充,例如

     [[ 10.   1.   1.   3.   0.   0.]
      [ 11.   1.   1.   3.   0.   0.]
      [ 13.   8.   3.  13.   0.   0.]
      [ 22.   4.   0.  23.   0.   0.]
      [ 32.   6.   0.   8.   0.   0.]
      [ 43.   9.   6.   3.   0.   0.]
      [ 34.   0.   0.   0.   0.   0.]
      [ 56.   0.   0.   0.   0.   0.]]

(将第一个coln有效地排序,但在这里并不重要,这将是另一个好处)

谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

我首先要创建要添加到数据库底部的数组:

import numpy as np
D = np.array([[ 10.,   1.,   1.,   3.,   0.,   0.],
           [ 11.,   1.,   1.,   3.,   0.,   0.],
           [ 13.,   8.,   3.,  13.,   0.,   0.],
           [ 22.,   4.,   0.,  23.,   0.,   0.],
           [ 32.,   6.,   0.,   8.,   0.,   0.],
           [ 43.,   9.,   6.,   3.,   0.,   0.]])
A = np.array([34., 56.])

Bottom = np.zeros( (A.shape[0], D.shape[1]) )
Bottom[:,0] = A

现在将该部分连接到旧数组

D = concatenate( [D, Bottom] )

另外还有调整大小功能

D = np.resize( D, ( D.shape[0]+len(A), D.shape[1] ) )

但是现在你需要确保新添加的行为零

D[-len(A):]
D[-len(A):,0] = A

甚至可能整个数组都被复制到一个新的位置,但在某些情况下你可能会很幸运,并且在原始数组之后内存中有足够的空间。

表现明智我不知道什么是更好的。但是通常添加到numpy数组并不是一个好主意。也许您认为在开始时创建一个更大的数组并使用切片D [:index_you_need]来显示您在实际时间实际想要的行。然后你可以将新行添加到那个大数组并更新切片。

如果您需要添加许多行,也许您应该使用python列表,它们更灵活。如果你计划进行大量的数字运算,那么numpy数组是你的选择,因为这就是它们的用途; - )。