gpt4 book ai didi

hashtable - Mathematica中的MemberQ

转载 作者:行者123 更新时间:2023-12-04 05:15:09 24 4
gpt4 key购买 nike

我有点不知所措,如何在Mathematica中有效地执行以下操作:

a = { 1, 2, 3, 4, 5 };  (* list of integers *)
b = { 2, 4, 6, 8 }; (* another list of integers *)
filter = Table[MemberQ[b, element], {element,a}]

预期输出为:
{False, True, False, True, False}

我的列表 ab很大,因此Mathematica通过 b进行了数以百万计的线性搜索。我希望它通过哈希表进行更快的查找。但是似乎没有这样的结构。我能找到的最接近的是SparseArray,但是
sa = SparseArray[{1 -> True, 2 -> True}];
MemberQ[sa, 1]

False

我敢肯定,在Mathematica中,只需一行或更少的代码就可以做到这一点,我只是看不到树木之类的东西。

有英雄要营救吗?同时,我将使用C#进行此操作。

最佳答案

另一个想法是使用规则和Dispatch。当blist的长度很大时,它似乎会更快:

alist = Prime /@ Range[20000];
blist = alist + 2;

membQ = First@Timing[MemberQ[blist,#]&/@alist;]

sparse = First@Timing[
s = SparseArray[blist -> ConstantArray[True, Length@blist], Max[alist, blist], False];
s[[#]] & /@ alist;
]

rules = First@Timing[
bRules = Dispatch[Append[Rule[#, True] & /@ blist, _ -> False]];
(# /. bRules) & /@ alist;
]

fct = First@Timing[
f[_] = False;
(f[#] = True) & /@ blist;
f /@ alist;
]

在我的笔记本电脑上,规则(0.06s)
编辑/比较功能和规则时间

@Karsten请随时回滚到您的原始答案

用Prime [...]生成的表

用RandomInteger [...]生成的表

关于hashtable - Mathematica中的MemberQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3696147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com