mindspore.ops.sparse_segment_mean
- mindspore.ops.sparse_segment_mean(x, indices, segment_ids)[源代码]
计算输出Tensor \(output_i = \frac{\sum_j x_{indices[j]}}{N}\) ,其中平均是对所有 \(j\) 满足 \(segment\_ids[j] == i\) 的元素, \(N\) 表示相加的元素个数。如果给定的分段ID \(i\) 不存在,则有 \(output[i] = 0\) 。
说明
在CPU平台, segment_ids 中的值会被校验是否排序,若索引值不是升序的,则抛出错误。另外, indices 中的值也会被校验是否在界限内,若索引值超出范围[0, x.shape[0]),则抛出错误。
在GPU平台,对于 segment_ids 未排序和 indices 越界则不抛出错误。如果,无序的 segment_ids 会导致安全但未指定的行为,而超出范围的 indices 将被忽略。
- 参数:
x (Tensor) - Tensor,其维度必须大于或等于1。
indices (Tensor) - 一维Tensor,数据类型为int32或int64。
segment_ids (Tensor) - 一维Tensor,与 indices 有同样的数据类型。索引值应当是已排序的,并且可以重复。
- 返回:
Tensor,其数据类型和维数与 x 相同。第一维度等于 segment_ids 的最后一个元素的值加一,其他维度与 x 的对应维度相同。
- 异常:
TypeError - x 、 indices 或 segment_ids 不是Tensor类型。
TypeError - x 的数据类型不是float16、float32、float64的任一类型。
TypeError - indices 和 segment_ids 的数据类型不是int32、int64的任一类型。
TypeError - indices 和 segment_ids 的数据类型不相同。
ValueError - x 、 indices 或 segment_ids 的维度不满足上述要求。
ValueError - indices 或 segment_ids 的shape不相同。
- 支持平台:
GPU
CPU
样例:
>>> import mindspore >>> from mindspore import Tensor, ops >>> x = Tensor([[0, 1, 2], [1, 2, 3], [3, 6, 7]], dtype=mindspore.float32) >>> indices = Tensor([0, 1, 2], dtype=mindspore.int32) >>> segment_ids = Tensor([1,2,2], dtype=mindspore.int32) >>> out = ops.sparse_segment_mean(x, indices, segment_ids) >>> print(out) [[0. 0. 0.] [0. 1. 2.] [2. 4. 5.]]