numpy.unique

numpy.unique(a, return_index=False, return_inverse=False, return_counts=False, axis=None)

Функция unique() находит уникальные элементы массива и возвращает их в отсортированном массиве.

В зависимости от установленных параметров, данная функция может возвращать: индексы входного массива, которые соответствуют его уникальным элементам; индексы уникального массива, которые позволяют восстановить входной массив; количество вхождений каждого уникального элемента во входном массиве.

Параметры:
a - подобный массиву объект
Массив NumPy или любой объект который может быть преобразован в массив NumPy. Если входной массив не является одномерным и не указана ось, по которой необходимо искать ункальные элементы, то данный массив будет сжат до одной оси.
return_index - True или False (необязательный)
Если True то помимо самих уникальных элементов так же будут возвращаться их индексы во входном массиве. По умолчанию return_index = False.
return_inverse - True или False (необязательный)
Если True то помимо самих уникальных элементов так же будут возвращаться индексы уникального массива, которые можно использовать для восстановления входного массива. По умолчанию return_inverse = False.
return_counts - True или False (необязательный)
Если True то помимо самих уникальных элементов так же будет возвращаться количество вхождений каждого из них во входном массиве. По умолчанию return_counts = False.
axis - целое число или None (необязательный)
Определяет ось по которой необходимо найти уникальные элементы. Если axis = None (по умолчанию), то входной массив будет сжат до одной оси. Если ось указана, то повторяющиеся элементы вдоль оси будут удалены, а все остальные оси будут принадлежать каждому из уникальных элементов. Массивы объектов (массивов из других массивов NumPy или их подклассов) и структурированные массивы не обрабатываются если не указанна ось. Подмассивы и элементы структурированного массива сортируются в лексикографическом порядке.
Возвращает:
Массив уникальных элементов
Одномерный отсортированный ммассив NumPy, который состоит из уникальных элементов входного массива.
Массив индексов уникальных элементов (если return_index = True)
Одномерный ммассив NumPy, который состоит из индексов первых вхождений уникальных элементов.
Массив индексов уникальных элементов (если return_inverse = True)
Одномерный ммассив NumPy, который состоит из индексов всех вхождений уникальных элементов, пригодный для восстановления исходного массива.
Массив с количеством вхождений уникальных элементов (если return_counts = True)
Одномерный ммассив NumPy, который состоит из чисел соответствующих количеству вхождений каждого уникального элемента в исходном массиве.


Примеры

>>> import numpy as np
>>> 
>>> np.unique([1, 1, 1, 1, 2, 2, 2, 2])
array([1, 2])
>>> 
>>> np.unique([[1, 1, 1, 1], [2, 2, 2, 2]])
array([1, 2])
>>> 
>>> np.unique([[1, 0], [0, 1], [1, 1], [1, 0], [0, 1]])
array([0, 1])
>>>
>>>
>>> #  Уникальные элементы в столбце:
... np.unique([[1, 0], [0, 1], [1, 1], [1, 0], [0, 1]], axis = 0)
array([[0, 1],
       [1, 0],
       [1, 1]])
>>>
>>> 
>>> #  Уникальные столбцы, результат
... #  может показаться странным, но он содержит 
... #  лишь уникальные столбцы входного массива:
... np.unique([[1, 0], [0, 1], [1, 1], [1, 0], [0, 1]], axis = 1)
array([[0, 1],
       [1, 0],
       [1, 1],
       [0, 1],
       [1, 0]])
>>>
>>> #  Например в этом массиве всего один уникальный столбец:
... np.array([[0, 0, 0], [1, 1, 1], [1, 1, 1], [0, 0, 0]])
array([[0, 0, 0],
       [1, 1, 1],
       [1, 1, 1],
       [0, 0, 0]])
>>>
>>> # Действительно:
... np.unique([[0, 0, 0], [1, 1, 1], [1, 1, 1], [0, 0, 0]], axis = 1)
array([[0],
       [1],
       [1],
       [0]])
>>>
>>> #  А в этом массиве три уникальных столбца:
... np.array([[0, 0, 0, 1], [1, 1, 1, 2], [1, 1, 1, 3], [4, 0, 0, 0]])
array([[0, 0, 0, 1],
       [1, 1, 1, 2],
       [1, 1, 1, 3],
       [4, 0, 0, 0]])
>>> 
>>> np.unique([[0, 0, 0, 1], [1, 1, 1, 2], [1, 1, 1, 3], [4, 0, 0, 0]], axis = 1)
array([[0, 0, 1],
       [1, 1, 2],
       [1, 1, 3],
       [0, 4, 0]])
>>>
>>>
>>> #  Индексы уникальных элементов во входном массиве:
... a = np.array([0, 1, 1, 0, 2, 3, 1, 2, 0])
>>> 
>>> np.unique(a, return_index=True)
(array([0, 1, 2, 3]), array([0, 1, 4, 5], dtype=int32))
>>> 
>>> uniq, idx = np.unique(a, return_index=True)
>>> 
>>> uniq
array([0, 1, 2, 3])
>>> 
>>> idx
array([0, 1, 4, 5], dtype=int32)
>>> 
>>> a[idx]
array([0, 1, 2, 3])
>>> 
>>> 
>>> #  Массив индексов уникальных элементов:
... a = np.array([0,1,1,0,2,3,1,2,0])
>>> 
>>> np.unique(a, return_inverse=True)
(array([0, 1, 2, 3]), array([0, 1, 1, 0, 2, 3, 1, 2, 0], dtype=int32))
>>> 
>>> uniq, idx = np.unique(a, return_inverse=True)
>>> 
>>> uniq
array([0, 1, 2, 3])
>>> 
>>> idx
array([0, 1, 1, 0, 2, 3, 1, 2, 0], dtype=int32)
>>> 
>>> uniq[idx]
array([0, 1, 1, 0, 2, 3, 1, 2, 0])
>>> 
>>>
>>> #  Массив с количеством вхождений уникальных элементов:
... a = np.array([0, 1, 1, 0, 2, 3, 1, 2, 0])
>>> 
>>> np.unique(a, return_counts = True)
(array([0, 1, 2, 3]), array([3, 3, 2, 1]))