如何向numpy数组中添加项目

75 投票
7 回答
221475 浏览
提问于 2025-04-16 12:12

我需要完成以下任务:

从:

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]])

我尝试过像这样做:a[n] = array([1,3,4,x])

但是numpy报错说形状不匹配。我还尝试遍历a,然后把元素x添加到每个项目上,但这些变化没有反映出来。

有没有什么好的方法可以做到这一点?

7 个回答

8

一种方法(可能不是最好的)是创建一个新的数组,里面放入新的元素,然后使用列堆叠(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]])
13
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))
array([[ 1,  3,  4, 10],
       [ 1,  2,  3, 20],
       [ 1,  2,  1, 30]])

返回的是 c

134

对于有Python经验的人来说,往现有数组里添加数据是很自然的需求。不过,如果你经常要往大数组里添加数据,你会发现NumPy并不像Python的list那样简单和高效。每次“添加”操作都需要重新分配数组的内存,这会暂时让内存需求翻倍。因此,更好的解决办法是尽量在一开始就分配一个足够大的数组,接近你算法最终需要的输出大小。然后在这个数组的子集(切片)上进行所有操作。理想情况下,应该尽量减少数组的创建和销毁。

当然,有时候这是不可避免的,处理这个问题的函数有:

对于二维数组:

对于三维数组(以上函数加上):

对于N维数组:

撰写回答