可能重复:
MATLAB 中的哈希表
一般问题
有什么方法可以在 Matlab 中获取 hashset 或 hashmap 结构?
我经常发现自己需要查找唯一条目或检查向量中的成员资格,并且使用诸如unique()
逻辑索引之类的命令似乎可以搜索向量,并且对于大量值集确实很慢。在 Matlab 中执行此操作的最佳方法是什么?
例子
例如,假设我有一个素数列表并想检查 3 是否为素数:
primes = [2,3,5,7,11,13];
if primes(primes==3)
disp('yes!')
else
disp('no!')
end
如果我用长向量来做这件事,很多时候事情会变得很慢。
在其他语言中
所以基本上,在 Matlab 中是否有与 python 的set()
anddict()
或类似的 Java 的java.util.HashSet
and等价的东西?java.util.HashMap
如果没有,是否有任何在大向量中进行查找的好方法?
编辑:对答案的反思
这是我在答案中得到建议的运行时间。
>> b = 1:1000000;
>> tic; for i=1:100000, any(b==i);; end; toc
Elapsed time is 125.925922 seconds.
s = java.util.HashSet();
>> for i=1:1000000, s.add(i); end
>> tic; for i=1:100000, s.contains(i); end; toc
Elapsed time is 25.618276 seconds.
>> m = containers.Map(1:1000000,ones(1,1000000));
>> tic; for i=1:100000, m(i); end; toc
Elapsed time is 2.715635 seconds
Java 集的构建也很慢,因此根据问题的不同,这也可能很慢。真的很高兴容器。地图提示。它真的破坏了其他例子,而且它也是即时设置的。