This operator is similar to tf.math.unsorted_segment_sum,
Instead of computing the sum over segments, it computes the minimum such that:
\(output_i = \min_{j...} data_[j...]\) where min is over tuples j... such
that segment_ids[j...] == i.
If the minimum is empty for a given segment ID i, it outputs the largest
possible value for the specific numeric type,
output[i] = numeric_limits<T>::max().
[null,null,["Last updated 2024-04-26 UTC."],[],[],null,["# tf.math.unsorted_segment_min\n\nComputes the minimum along segments of a tensor.\n\n#### View aliases\n\n\n**Compat aliases for migration**\n\nSee\n[Migration guide](https://www.tensorflow.org/guide/migrate) for\nmore details.\n\n[`tf.compat.v1.math.unsorted_segment_min`](https://www.tensorflow.org/api_docs/python/tf/math/unsorted_segment_min), [`tf.compat.v1.unsorted_segment_min`](https://www.tensorflow.org/api_docs/python/tf/math/unsorted_segment_min)\n\n\u003cbr /\u003e\n\n tf.math.unsorted_segment_min(\n data: Annotated[Any, ../../tf/raw_ops/Any],\n segment_ids: Annotated[Any, ../../tf/raw_ops/Any],\n num_segments: Annotated[Any, ../../tf/raw_ops/Any],\n name=None\n ) -\u003e Annotated[Any, ../../tf/raw_ops/Any]\n\nRead\n[the section on segmentation](https://tensorflow.org/api_docs/python/tf/math#Segmentation)\nfor an explanation of segments.\n\nThis operator is similar to [`tf.math.unsorted_segment_sum`](../../tf/math/unsorted_segment_sum),\nInstead of computing the sum over segments, it computes the minimum such that:\n\n\\\\(output_i = \\\\min_{j...} data_\\[j...\\]\\\\) where min is over tuples `j...` such\nthat `segment_ids[j...] == i`.\n\nIf the minimum is empty for a given segment ID `i`, it outputs the largest\npossible value for the specific numeric type,\n`output[i] = numeric_limits\u003cT\u003e::max()`.\n\n#### For example:\n\n c = tf.constant([[1,2,3,4], [5,6,7,8], [4,3,2,1]])\n tf.math.unsorted_segment_min(c, tf.constant([0, 1, 0]), num_segments=2).numpy()\n array([[1, 2, 2, 1],\n [5, 6, 7, 8]], dtype=int32)\n\nIf the given segment ID `i` is negative, then the corresponding value is\ndropped, and will not be included in the result.\n| **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.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Args ---- ||\n|----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `data` | A `Tensor`. Must be one of the following types: `float32`, `float64`, `int32`, `uint8`, `int16`, `int8`, `int64`, `bfloat16`, `uint16`, `half`, `uint32`, `uint64`. |\n| `segment_ids` | A `Tensor`. Must be one of the following types: `int32`, `int64`. A tensor whose shape is a prefix of `data.shape`. The values must be less than `num_segments`. \u003cbr /\u003e | **Caution:** The values are always validated to be in range on CPU, never validated on GPU. |\n| `num_segments` | A `Tensor`. Must be one of the following types: `int32`, `int64`. |\n| `name` | A name for the operation (optional). |\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Returns ------- ||\n|---|---|\n| A `Tensor`. Has the same type as `data`. ||\n\n\u003cbr /\u003e"]]