python:检查一个numpy数组是否包含另一个数组的任何元素

python:检查一个numpy数组是否包含另一个数组的任何元素,python,numpy,Python,Numpy,检查numpy数组是否包含其他数组的任何元素的最佳方法是什么 例如: array1 = [10,5,4,13,10,1,1,22,7,3,15,9] array2 = [3,4,9,10,13,15,16,18,19,20,21,22,23]` 如果array1包含array2的任何值,我想得到一个True,否则一个False,你可以试试这个 >>> array1 = [10,5,4,13,10,1,1,22,7,3,15,9] >>> array2 = [

检查numpy数组是否包含其他数组的任何元素的最佳方法是什么

例如:

array1 = [10,5,4,13,10,1,1,22,7,3,15,9]
array2 = [3,4,9,10,13,15,16,18,19,20,21,22,23]`
如果
array1
包含
array2
的任何值,我想得到一个
True
,否则一个
False

,你可以试试这个

>>> array1 = [10,5,4,13,10,1,1,22,7,3,15,9]
>>> array2 = [3,4,9,10,13,15,16,18,19,20,21,22,23]
>>> set(array1) & set(array2)
set([3, 4, 9, 10, 13, 15, 22])
若得到结果,则表示两个数组中都有公共元素


如果结果为空,则表示没有公共元素。

使用Pandas,可以使用
isin

a1 = np.array([10,5,4,13,10,1,1,22,7,3,15,9])
a2 = np.array([3,4,9,10,13,15,16,18,19,20,21,22,23])

>>> pd.Series(a1).isin(a2).any()
True
使用numpy函数(根据@Norman的注释):

对于本例中的小型阵列,使用set的解决方案显然是赢家。对于更大、不同的阵列(即无重叠),Pandas和Numpy解决方案速度更快。但是,对于较大的数组,它似乎更适合

小型阵列(12-13个元素)

使用具有100k个元素的数组(无重叠)

a3 = np.random.randint(0, 100000, 100000)
a4 = a3 + 100000

%timeit np.intersect1d(a3, a4)
100 loops, best of 3: 13.8 ms per loop    

%timeit pd.Series(a3).isin(a4).any()
100 loops, best of 3: 18.3 ms per loop

%timeit np.any(np.in1d(a3, a4))
100 loops, best of 3: 18.4 ms per loop

%timeit set(a3) & set(a4)
10 loops, best of 3: 23.6 ms per loop

%timeit any(i in a3 for i in a4)
1 loops, best of 3: 34.5 s per loop

您可以使用
任何
内置函数和列表理解:

>>> array1 = [10,5,4,13,10,1,1,22,7,3,15,9]
>>> array2 = [3,4,9,10,13,15,16,18,19,20,21,22,23]
>>> any(i in array2 for i in array1)
True

使用
np.any(np.in1d(array2,array1))
。我在评论中交换了数组。我改正了。@Norman这个命令重要吗?如果我们要测试它们是否共享一个值,我不这么认为。哦,是的,现在已经晚了:-)但是出于性能原因,可能会先使用较短的数组。那么
np.intersect1d
呢?我刚找到它。
a3 = np.random.randint(0, 100000, 100000)
a4 = a3 + 100000

%timeit np.intersect1d(a3, a4)
100 loops, best of 3: 13.8 ms per loop    

%timeit pd.Series(a3).isin(a4).any()
100 loops, best of 3: 18.3 ms per loop

%timeit np.any(np.in1d(a3, a4))
100 loops, best of 3: 18.4 ms per loop

%timeit set(a3) & set(a4)
10 loops, best of 3: 23.6 ms per loop

%timeit any(i in a3 for i in a4)
1 loops, best of 3: 34.5 s per loop
>>> array1 = [10,5,4,13,10,1,1,22,7,3,15,9]
>>> array2 = [3,4,9,10,13,15,16,18,19,20,21,22,23]
>>> any(i in array2 for i in array1)
True