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]))