如何将项目添加到一个numpy数组

我需要完成以下任务:

从:

a = array([[1,3,4],[1,2,3]...[1,2,1]]) 

(每行添加一个元素)到:

 a = array([[1,3,4,x],[1,2,3,x]...[1,2,1,x]]) 

我已经尝试做像[n] =数组([1,3,4,x])的东西

但是大块头抱怨形状不匹配。 我尝试迭代通过a和附加元素x到每个项目,但更改不反映。

任何想法,我怎么能做到这一点?

将数据附加到现有的数组是一个很自然的事情,想要为任何有python经验的人做。 但是,如果你发现自己经常追加到大型数组,你很快就会发现NumPy并不像python list那样容易或者有效地完成这个任务。 你会发现每一个“追加”操作都需要重新分配arrays内存,并且短期内存需求加倍。 所以,更一般的解决scheme是尝试分配数组,使其与您的algorithm的最终输出一样大。 然后对该数组的子集( 切片 )执行所有操作。 数组的创build和销毁理想情况下应尽量减less。

这就是说,这通常是不可避免的,而这样做的function是:

对于二维数组:

  • np.hstack
  • np.vstack
  • np.column_stack
  • np.row_stack

对于三维arrays(以上加号):

  • np.dstack

对于NDarrays:

  • np.concatenate
 import numpy as np a = np.array([[1,3,4],[1,2,3],[1,2,1]]) b = np.array([10,20,30]) c = np.hstack((a, np.atleast_2d(b).T)) 

返回c

 array([[ 1, 3, 4, 10], [ 1, 2, 3, 20], [ 1, 2, 1, 30]]) 

一种方法(可能不是最好的)是用新的元素创build另一个数组,并做column_stack。 即

 >>>a = array([[1,3,4],[1,2,3]...[1,2,1]]) [[1 3 4] [1 2 3] [1 2 1]] >>>b = array([1,2,3]) >>>column_stack((a,b)) array([[1, 3, 4, 1], [1, 2, 3, 2], [1, 2, 1, 3]]) 

通过将标量扩展为python-list-type,可以使已经显示的附加单个标量更简单一些(也不需要转换为浮点数):

 import numpy as np a = np.array([[1,3,4],[1,2,3],[1,2,1]]) x = 10 b = np.hstack ((a, [[x]] * len (a) )) 

返回b为:

 array([[ 1, 3, 4, 10], [ 1, 2, 3, 10], [ 1, 2, 1, 10]]) 

追加行可以通过以下方式完成:

 c = np.vstack ((a, [x] * len (a[0]) )) 

返回c为:

 array([[ 1, 3, 4], [ 1, 2, 3], [ 1, 2, 1], [10, 10, 10]]) 

如果x只是一个标量值,那么可以尝试类似这样的方法来确保正在被附加/连接到最右边一列的数组的正确形状:

 import numpy as np a = np.array([[1,3,4],[1,2,3],[1,2,1]]) x = 10 b = np.hstack((a,x*np.ones((a.shape[0],1)))) 

返回b为:

 array([[ 1., 3., 4., 10.], [ 1., 2., 3., 10.], [ 1., 2., 1., 10.]]) 
 target = [] for line in a.tolist(): new_line = line.append(X) target.append(new_line) return array(target)