numpy.in1d#
- numpy.in1d(ar1, ar2, assume_unique=False, invert=False, *, kind=None)[source]#
測試一維陣列中的每個元素是否存在於第二個陣列中。
返回一個與 ar1 長度相同的布林陣列,如果 ar1 的元素在 ar2 中則為 True,否則為 False。
- 參數:
- ar1(M,) 類陣列
輸入陣列。
- ar2類陣列
用於測試 ar1 每個值的目標值。
- assume_uniquebool,選填
如果為 True,則假設輸入陣列都是唯一值,這可以加速計算。預設值為 False。
- invertbool,選填
如果為 True,則返回陣列中的值會被反轉(即,如果 ar1 的元素在 ar2 中則為 False,否則為 True)。預設值為 False。
np.in1d(a, b, invert=True)
等效於(但比)np.invert(in1d(a, b))
更快。- kind{None, ‘sort’, ‘table’},選填
要使用的演算法。這不會影響最終結果,但會影響速度和記憶體使用量。預設值 None 會根據記憶體考量自動選擇。
如果為 ‘sort’,將使用基於合併排序的方法。這將佔用大約 ar1 和 ar2 大小總和的 6 倍記憶體,不包括 dtype 的大小。
如果為 ‘table’,將使用類似於計數排序的查找表方法。這僅適用於布林和整數陣列。這將佔用 ar1 的大小加上 ar2 的最大值減最小值 的記憶體。assume_unique 在使用 ‘table’ 選項時無效。
如果為 None,如果所需的記憶體分配小於或等於 ar1 和 ar2 大小總和的 6 倍,則會自動選擇 ‘table’,否則將使用 ‘sort’。這樣做是為了預設不使用大量記憶體,即使 ‘table’ 在大多數情況下可能更快。如果選擇 ‘table’,則 assume_unique 無效。
- 返回:
- in1d(M,) ndarray,布林
值 ar1[in1d] 在 ar2 中。
另請參閱
isin
保留 ar1 形狀的此函數版本。
註解
in1d
可以被視為 Python 關鍵字 in 的元素級函數版本,適用於一維序列。in1d(a, b)
大致等同於np.array([item in b for item in a])
。但是,如果 ar2 是一個集合或類似的(非序列)容器,則此想法會失敗:由於ar2
被轉換為陣列,在這些情況下asarray(ar2)
是一個物件陣列,而不是預期的包含值陣列。如果以下關係成立,則使用
kind='table'
往往比 kind=’sort’ 更快:log10(len(ar2)) > (log10(max(ar2)-min(ar2)) - 2.27) / 0.927
,但可能使用更多記憶體。kind 的預設值將僅根據記憶體使用量自動選擇,因此如果可以放寬記憶體限制,則可以手動設定kind='table'
。範例
>>> import numpy as np >>> test = np.array([0, 1, 2, 5, 0]) >>> states = [0, 2] >>> mask = np.in1d(test, states) >>> mask array([ True, False, True, False, True]) >>> test[mask] array([0, 2, 0]) >>> mask = np.in1d(test, states, invert=True) >>> mask array([False, True, False, True, False]) >>> test[mask] array([1, 5])