4

假设我们有三个一维数组:

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

C最初用零填充。A给出C应该改变的元素的索引(它们可能会重复),并B给出应该添加到 的初始零的值C。例如,如果A = [1, 3, 3, 3, 29]and B = [2, 3, 4, 2, 3],C[1]应该变成 2, C[3] - 9, C[29] - 3; 所有其他C元素应保持为 0。我将其编写为 for 循环:

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

但是有没有更有效的方法可以numpy在向量形式中做同样的事情?

4

1 回答 1

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索引时重复值的行为可能非常奇怪,并且很容易被您在简单情况下看到的行为误导。我完全避免使用它们,因为这种行为几乎不是我想要的。)

于 2013-08-29T15:44:29.673 回答