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.float32
、numpy.int32
、numpy.uint32
、numpy.uint64
和numpy.ulonglong
。注意
scatter_add()
在索引超出轴大小范围时不会引发错误。相反,它会回绕(wrap)索引。另见