[英]How to check efficiently if numpy array a contains b
如何檢查一個numpy數組a是否有效地包含另一個numpy數組? 有點像b是a的子集....
謝謝!
編輯:a和b是一維numpy數組
如果你問b
是一個連續的子陣列 a
從算法上講,如果其中一個數組可以包含重復值,則問題等同於單模式字符串搜索問題 。 這個問題有幾種已知的算法。 不幸的是,兩者都不太簡單。
另外,通過首先查找b
的第一個元素,然后比較以下所有元素,實現起來很簡單:
import numpy as np
def is_subarray_no_repeatition(a, b):
try:
i = np.where(a == b[0])[0][0]
except IndexError:
# either b is empty, or b[0] not in a
return b.size == 0
a = a[i : i+b.size]
if a.size < b.size:
return False
return (a == b).all()
如果你問b
是的一個子集 a
(即每個元素b
中存在a
)
def is_subset(a, b):
b = np.unique1d(b)
c = np.intersect1d(a,b)
return c.size == b.size
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.