在python中通过另外两个修改了数组

时间:2013-08-29 15:19:03

标签: python numpy

假设我们有三个1-D阵列:

  • A(长度为5),
  • B(长度相同,示例中为5)
  • C(更长,比如长度100)

C最初填充零。 AC元素提供了应该更改的索引(它们可能会重复),而B会给出应该添加到C的初始零的值。例如,如果A = [1, 3, 3, 3, 29]B = [2, 3, 4, 2, 3],则C[1]应为2,C[3] - 9C[29] - 3;所有其他C元素应保持为0。 我把它写成for-loop:

for i in range(len(A) - 1):
    C[A[i]] = C[A[i]] + B[i]

但是,在矢量形式的numpy中有更有效的方法吗?

1 个答案:

答案 0 :(得分:3)

我认为你或许可以使用bincount,至少对于1-D案例:

>>> A = np.array([1,3,3,3,29])
>>> B = np.array([2,3,4,2,3])
>>> np.bincount(A, B)
array([ 0.,  2.,  0.,  9.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  3.])

(旁白:使用numpy索引时重复的值可能会非常奇怪,并且很容易被你在简单情况下看到的行为误导。我完全避免它们,因为行为几乎从不是什么我想要。)