External Functions

cupy.scatter_add(a, slices, value)[source]

Adds given values to specified elements of an array.

It adds value to the specified elements of a. If all of the indices target different locations, the operation of scatter_add() is equivalent to a[slices] = a[slices] + value. If there are multiple elements targeting the same location, scatter_add() uses all of these values for addition. On the other hand, a[slices] = a[slices] + value only adds the contribution from one of the indices targeting the same location.

Note that just like an array indexing, negative indices are interpreted as counting from the end of an array.

Example

>>> import numpy
>>> import cupy
>>> a = cupy.zeros((6,), dtype=numpy.float32)
>>> i = cupy.array([1, 0, 1])
>>> v = cupy.array([1., 1., 1.])
>>> cupy.scatter_add(a, i, v);
>>> a
array([ 1.,  2.,  0.,  0.,  0.,  0.], dtype=float32)
Parameters:
  • a (ndarray) – An array that gets added.
  • slices – It is integer, slices, ellipsis, numpy.newaxis, integer array-like or tuple of them. It works for slices used for cupy.ndarray.__getitem__() and cupy.ndarray.__setitem__().
  • v (array-like) – Values to increment a at referenced locations.

Note

It only supports types that are supported by CUDA’s atomicAdd. The supported types are numpy.float32, numpy.int32, numpy.uint32, numpy.uint64 and numpy.ulonglong.

Note

scatter_add() does not raise an error when indices exceed size of axes. Instead, it wraps indices.