numpy.in1d#

numpy.in1d(ar1, ar2, assume_unique=False, invert=False, *, kind=None)[source]#

測試一維陣列中的每個元素是否存在於第二個陣列中。

Deprecated since version 2.0: 自 2.0 版本起已棄用:對於新程式碼,請使用 isin 而非 in1d

返回一個與 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’,將使用基於合併排序的方法。這將佔用大約 ar1ar2 大小總和的 6 倍記憶體,不包括 dtype 的大小。

  • 如果為 ‘table’,將使用類似於計數排序的查找表方法。這僅適用於布林和整數陣列。這將佔用 ar1 的大小加上 ar2 的最大值減最小值 的記憶體。assume_unique 在使用 ‘table’ 選項時無效。

  • 如果為 None,如果所需的記憶體分配小於或等於 ar1ar2 大小總和的 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])