mindspore.ops.unsorted_segment_sum
- mindspore.ops.unsorted_segment_sum(input_x, segment_ids, num_segments)[源代码]
沿分段计算输入Tensor元素的和。
计算输出Tensor \(\text{output}[i] = \sum_{segment\_ids[j] == i} \text{data}[j, \ldots]\) ,其中 \(j,...\) 是代表元素索引的Tuple。 segment_ids 确定输入Tensor元素的分段。 segment_ids 不需要排序,也不需要覆盖 num_segments 范围内的所有值。
unsorted_segment_sum的计算过程如下图所示:
说明
如果 segment_ids 中不存在segment_id i ,则对输出 output[i] 填充0。
在Ascend平台上,如果segment_id的值小于0或大于输入Tensor的shape的长度,将触发执行错误。
如果给定的segment_ids \(i\) 的和为空,则 \(\text{output}[i] = 0\) 。如果 segment_ids 元素为负数,将忽略该值。 num_segments 必须等于不同segment_id的数量。
- 参数:
input_x (Tensor) - 待进行分段求和的Tensor,shape: \((x_1, x_2, ..., x_R)\) 。
segment_ids (Tensor) - 用于指示每个元素所属段的标签,将shape设置为 \((x_1, x_2, ..., x_N)\) ,其中0<N<=R。
num_segments (Union[int, Tensor], 可选) - 分段数量 \(z\) ,可以为int或零维的Tensor。
- 返回:
Tensor, shape为 \((z, x_{N+1}, ..., x_R)\)。
- 异常:
TypeError - num_segments 不是int类型或者零维Tensor。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import mindspore >>> from mindspore import Tensor >>> from mindspore import ops >>> input_x = Tensor([1, 2, 3, 4], mindspore.float32) >>> segment_ids = Tensor([0, 0, 1, 2], mindspore.int32) >>> num_segments = 4 >>> output = ops.unsorted_segment_sum(input_x, segment_ids, num_segments) >>> print(output) [3. 3. 4. 0.] >>> input_x = Tensor([1, 2, 3, 4, 2, 5], mindspore.float32) >>> segment_ids = Tensor([0, 0, 1, 2, 3, 4], mindspore.int32) >>> num_segments = 6 >>> output = ops.unsorted_segment_sum(input_x, segment_ids, num_segments) >>> print(output) [3. 3. 4. 2. 5. 0.]