如何在某些索引处将元素从一个numpy数组添加到另一个numpy数组?

时间:2016-03-15 08:36:30

标签: python arrays numpy

我在一个数组中有元素的形式(索引,值),例如

5, 20
8, 10

我需要将这些元素添加到另一个最初为空的不同大小的数组中,例如

X = np.zeros((1, 10))

并将X的值设置为索引处第一个数组中给出的值。所以X,最后应该是

X = [0, 0, 0, 0, 0, 20, 0, 0, 10, 0]

因为X的第5个元素应该是20,而第8个元素应该是10.是否有一个numpy数组函数可以执行此操作,还是可以用于快速计算的其他内容?

1 个答案:

答案 0 :(得分:1)

您正在寻找np.add.at。因此,假设X是要存储添加项的1D数组,并且A是包含要添加的索引和值的数组,您可以这样做 -

np.add.at(X,A[:,0],A[:,1])

因此,输入是:

X      : Array holding the additions
A[:,0] : Indices where additions are to be stored
A[:,1] : Values to be added

示例运行 -

In [21]: A = np.array([[5,20],[8,10]])      # Indices and values

In [22]: X = np.zeros(10,dtype=A.dtype)     # Array to store additions

In [23]: np.add.at(X,A[:,0],A[:,1])         # Perform np.add.at

In [24]: X                                  # Show output
Out[24]: array([ 0,  0,  0,  0,  0, 20,  0,  0, 10,  0])

如果通过“添加”,你的意思是索引是唯一的,你只想“放”值,而不是“添加”,你可以初始化输出数组并将其索引到它中,如同样本案例所示 -

In [25]: A = np.array([[5,20],[8,10]])

In [26]: X = np.zeros(10,dtype=A.dtype)

In [27]: X[A[:,0]] = A[:,1]

In [28]: X
Out[28]: array([ 0,  0,  0,  0,  0, 20,  0,  0, 10,  0])