당신과 같이, 같은 ID
기반의 합산에 대한 np.bincount
을 사용할 수 있습니다 -
a += np.bincount(b,c,minlength=a.size)
런타임 테스트를 -
In [136]: # Large arrays as inputs
...: a = np.random.rand(3)
...: c = np.random.rand(10000)
...: b = np.random.randint(0,3,10000)
...:
...: # Make copies for testing
...: a1 = a.copy()
...: a2 = a.copy()
...:
In [137]: def bincount_app(a, b, c): # bincount approach as func
...: a += np.bincount(b,c,minlength=a.size)
...:
In [138]: %timeit np.add.at(a1, b, c) # @user2357112's soln
1000 loops, best of 3: 1.29 ms per loop
In [139]: %timeit bincount_app(a2, b, c)
10000 loops, best of 3: 36.6 µs per loop
for 루프를 없애고 여전히 'a'가 그렇게 수정 되었습니까? – Saksow
예, 'for'를 제거하고 같은 결과를 얻었습니다. – ali
반복해야합니다. 다른 방법은 없습니다. 2 회 반복을 병합 할 수 있으므로 한 번만 반복 할 수 있지만 회피 할 수는 없습니다. – Saksow