numpy.unique#

numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None, *, equal_nan=True)[原始碼]#

尋找陣列中的唯一元素。

傳回陣列中已排序的唯一元素。除了唯一元素之外,還有三個可選的輸出:

  • 輸入陣列中提供唯一值的索引

  • 唯一陣列中重建輸入陣列的索引

  • 每個唯一值在輸入陣列中出現的次數

參數:
ararray_like

輸入陣列。除非指定 axis,否則如果輸入陣列還不是 1 維,則會將其展平。

return_indexbool,可選

若為 True,則同時傳回 ar 的索引(沿指定的軸,如果已提供,或在展平的陣列中),這些索引會產生唯一陣列。

return_inversebool,可選

若為 True,則同時傳回唯一陣列的索引(針對指定的軸,如果已提供),這些索引可用於重建 ar

return_countsbool,可選

若為 True,則同時傳回每個唯一項目在 ar 中出現的次數。

axisint 或 None,可選

要操作的軸。若為 None,ar 將會被展平。若為整數,則由給定軸索引的子陣列將會被展平,並視為具有給定軸維度的 1 維陣列的元素,詳情請參閱註解。如果使用 axis kwarg,則不支援包含物件的物件陣列或結構化陣列。預設值為 None。

equal_nanbool,可選

若為 True,則將傳回陣列中的多個 NaN 值摺疊成一個。

版本 1.24 新增。

傳回值:
uniquendarray

已排序的唯一值。

unique_indicesndarray,可選

原始陣列中唯一值首次出現位置的索引。僅在 return_index 為 True 時提供。

unique_inversendarray,可選

從唯一陣列重建原始陣列的索引。僅在 return_inverse 為 True 時提供。

unique_countsndarray,可選

每個唯一值在原始陣列中出現的次數。僅在 return_counts 為 True 時提供。

另請參閱

repeat

重複陣列的元素。

sort

傳回陣列的已排序副本。

註解

當指定軸時,會排序由軸索引的子陣列。這是透過使指定的軸成為陣列的第一個維度(將軸移動到第一個維度以保持其他軸的順序),然後以 C 順序展平子陣列來完成的。然後將展平的子陣列視為結構化類型,每個元素都給定一個標籤,其效果是我們最終得到一個 1 維結構化類型陣列,可以像任何其他 1 維陣列一樣處理。結果是展平的子陣列以字典順序排序,從第一個元素開始。

在版本 1.21 中變更:與 np.sort 類似,NaN 將排序到值的末尾。對於複數陣列,所有 NaN 值都被視為等效(無論 NaN 是在實部還是虛部中)。作為傳回陣列的代表,選擇字典順序中最小的一個 - 請參閱 np.sort 以了解複數陣列的字典順序是如何定義的。

在版本 2.0 中變更:對於多維輸入,unique_inverse 會被重新塑形,以便可以使用 np.take(unique, unique_inverse, axis=axis) 重建輸入。當 axis=None 時,結果現在不是 1 維的。

請注意,在 NumPy 2.0.0 中,即使 axis 不是 None,也會傳回更高維度的陣列。這已被還原,但可以使用 inverse.reshape(-1) 來確保與兩個版本的相容性。

範例

>>> import numpy as np
>>> np.unique([1, 1, 2, 2, 3, 3])
array([1, 2, 3])
>>> a = np.array([[1, 1], [2, 3]])
>>> np.unique(a)
array([1, 2, 3])

傳回 2D 陣列的唯一列

>>> a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
>>> np.unique(a, axis=0)
array([[1, 0, 0], [2, 3, 4]])

傳回原始陣列中提供唯一值的索引

>>> a = np.array(['a', 'b', 'b', 'c', 'a'])
>>> u, indices = np.unique(a, return_index=True)
>>> u
array(['a', 'b', 'c'], dtype='<U1')
>>> indices
array([0, 1, 3])
>>> a[indices]
array(['a', 'b', 'c'], dtype='<U1')

從唯一值和反向索引重建輸入陣列

>>> a = np.array([1, 2, 6, 4, 2, 3, 2])
>>> u, indices = np.unique(a, return_inverse=True)
>>> u
array([1, 2, 3, 4, 6])
>>> indices
array([0, 1, 4, 3, 1, 2, 1])
>>> u[indices]
array([1, 2, 6, 4, 2, 3, 2])

從唯一值和計數重建輸入值

>>> a = np.array([1, 2, 6, 4, 2, 3, 2])
>>> values, counts = np.unique(a, return_counts=True)
>>> values
array([1, 2, 3, 4, 6])
>>> counts
array([1, 3, 1, 1, 1])
>>> np.repeat(values, counts)
array([1, 2, 2, 2, 3, 4, 6])    # original order not preserved