cupyx.scatter_add#

cupyx.scatter_add(a, slices, value)[source]#

将给定值添加到数组的指定元素。

它将 value 添加到 a 的指定元素。如果所有索引都指向不同的位置,则 scatter_add() 的操作等价于 a[slices] = a[slices] + value。如果有多个元素指向同一位置,scatter_add() 将使用所有这些值进行加法运算。另一方面,a[slices] = a[slices] + value 只添加指向同一位置的其中一个索引的贡献。

注意,就像数组索引一样,负索引被解释为从数组末尾开始计数。

另请注意,scatter_add() 的行为与 numpy.add.at() 完全相同。

示例

>>> import cupy
>>> import cupyx
>>> a = cupy.zeros((6,), dtype=cupy.float32)
>>> i = cupy.array([1, 0, 1])
>>> v = cupy.array([1., 1., 1.])
>>> cupyx.scatter_add(a, i, v);
>>> a
array([1., 2., 0., 0., 0., 0.], dtype=float32)
参数:
  • a (ndarray) – 将要添加的数组。

  • slices – 它可以是整数、切片、省略号、numpy.newaxis、整数数组类型、布尔数组类型或它们的组合(元组)。它适用于 cupy.ndarray.__getitem__()cupy.ndarray.__setitem__() 中使用的切片。

  • v (array-like) – 用于增加 a 中引用位置的值。

注意

slices 中包含整数数组时,它仅支持 CUDA atomicAdd 支持的类型。支持的类型包括 numpy.float32numpy.int32numpy.uint32numpy.uint64numpy.ulonglong

注意

scatter_add() 在索引超出轴大小范围时不会引发错误。相反,它会回绕(wrap)索引。