Computes the product along segments of a tensor.
tf.math.unsorted_segment_prod(
data: _atypes.TensorFuzzingAnnotation[TV_UnsortedSegmentProd_T],
segment_ids: _atypes.TensorFuzzingAnnotation[TV_UnsortedSegmentProd_Tindices],
num_segments: _atypes.TensorFuzzingAnnotation[TV_UnsortedSegmentProd_Tnumsegments],
name=None
) -> _atypes.TensorFuzzingAnnotation[TV_UnsortedSegmentProd_T]
Read the section on segmentation for an explanation of segments.
This operator is similar to tf.math.unsorted_segment_sum
,
Instead of computing the sum over segments, it computes the product of all
entries belonging to a segment such that:
\(output_i = \prod_{j...} data[j...]\) where the product is over tuples
j...
such that segment_ids[j...] == i
.
For example:
c = tf.constant([[1,2,3,4], [5,6,7,8], [4,3,2,1]])
tf.math.unsorted_segment_prod(c, tf.constant([0, 1, 0]), num_segments=2).numpy()
array([[4, 6, 6, 4],
[5, 6, 7, 8]], dtype=int32)
If there is no entry for a given segment ID i
, it outputs 1.
If the given segment ID i
is negative, then the corresponding value is
dropped, and will not be included in the result.
Caution: On CPU, values in segment_ids
are always validated to be less than
num_segments
, and an error is thrown for out-of-bound indices. On GPU, this
does not throw an error for out-of-bound indices. On Gpu, out-of-bound indices
result in safe but unspecified behavior, which may include ignoring
out-of-bound indices or outputting a tensor with a 0 stored in the first
dimension of its shape if num_segments
is 0.
Returns | |
---|---|
A Tensor . Has the same type as data .
|