mindspore.ops.Unique

class mindspore.ops.Unique[源代码]

返回输入Tensor的唯一元素以及其对应的每个值的索引。

输出包含Tensor y 和Tensor idx ,格式形如( y , idx )。Tensor y 和Tensor idx 的shape在大多数情况下是不同的,因为Tensor y 可能存在重复,并且Tensor idx 的shape与输入保持一致。

要获得 idxy 之间相同的shape,请参考 mindspore.ops.UniqueWithPad

输入:
  • input_x (Tensor) - 输入Tensor。shape为 \((N,*)\) ,其中 \(*\) 表示,任意数量的附加维度。

输出:

Tuple,形如( y , idx )的Tensor对象, yinput_x 的数据类型相同,记录的是 input_x 中的唯一元素。 idx 是一个Tensor,记录的是输入 input_x 元素相对应的索引。

异常:
  • TypeError - 如果 input_x 不是Tensor。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore
>>> import numpy as np
>>> from mindspore import Tensor, ops, nn
>>> input_x = Tensor(np.array([1, 2, 5, 2]), mindspore.int32)
>>> output = ops.Unique()(input_x)
>>> print(output)
(Tensor(shape=[3], dtype=Int32, value= [1, 2, 5]), Tensor(shape=[4], dtype=Int32, value= [0, 1, 2, 1]))
>>> y = output[0]
>>> print(y)
[1 2 5]
>>> idx = output[1]
>>> print(idx)
[0 1 2 1]
>>> # As can be seen from the above, y and idx shape
>>> # note that for GPU, this operator must be wrapped inside a model, and executed in graph mode.
>>> class UniqueNet(nn.Cell):
...     def __init__(self):
...         super(UniqueNet, self).__init__()
...         self.unique_op = ops.Unique()
...
...     def construct(self, x):
...         output, indices = self.unique_op(x)
...         return output, indices
...
>>> input_x = Tensor(np.array([1, 2, 5, 2]), mindspore.int32)
>>> net = UniqueNet()
>>> output = net(input_x)
>>> print(output)
(Tensor(shape=[3], dtype=Int32, value= [1, 2, 5]), Tensor(shape=[4], dtype=Int32, value= [0, 1, 2, 1]))