<分区>
Possible Duplicate:
Hash tables in MATLAB
一般问题
有没有办法在Matlab中得到一个hashset或hashmap结构?
我经常发现自己需要在向量中查找唯一条目或检查成员资格,使用 unique()
或逻辑索引之类的命令似乎可以搜索向量,但对于大型值集。在 Matlab 中执行此操作的最佳方法是什么?
例子
例如,我有一个素数列表,想检查 3 是否是素数:
primes = [2,3,5,7,11,13];
if primes(primes==3)
disp('yes!')
else
disp('no!')
end
如果我使用长向量执行此操作,很多时候事情会变得很慢。
在其他语言中
基本上,是否有任何等同于 python 的 set()
和 dict()
,或者类似的 Java 的 java.util.HashSet
和java.util.HashMap
,在 Matlab 中?如果没有,有没有什么好的方法可以在大向量中进行查找?
编辑:对答案的思考
这是我在答案中得到建议的运行时间。
>> 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 集的构造也很慢,但根据问题的不同,这也可能很慢。真的很高兴 containers.Map 提示。它确实破坏了其他示例,而且设置也很迅速。