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 時提供。
註解
當指定軸時,會排序由軸索引的子陣列。這是透過使指定的軸成為陣列的第一個維度(將軸移動到第一個維度以保持其他軸的順序),然後以 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