高效的实施检查:对于数组中的每个元素,检查其是否存在于另一个数组中

时间:2018-12-17 06:01:15

标签: python arrays numpy

我有两个400k元素范围内的大型1d numpy数组。我需要检查数组A中的每个元素是否存在于数组B中。我使用了in1d,但它似乎太慢了,需要很多时间。我想知道是否有任何方法可以加快速度?

A = np.array([1,2,3,4,5,6,7]) 
B = np.array([3,4,7])
result = np.in1d(A, B, invert=True)
result
>> array([ True,  True, False, False,  True,  True, False]

2 个答案:

答案 0 :(得分:3)

尝试将B转换为更适合搜索的结构(哈希集或排序集)

答案 1 :(得分:1)

我更喜欢pandas来完成这项任务:

import pandas as pd

A, B = pd.DataFrame(A), pd.DataFrame(B)
A.merge(B, on=0, how="left", indicator=True)

>>> 0   _merge
0   1   left_only
1   2   left_only
2   3   both
3   4   both
4   5   left_only
5   6   left_only
6   7   both