Possible Duplicate:
Hash tables in MATLAB
一般问题
有没有办法在Matlab中获得哈希集或哈希映射结构?
我经常发现自己需要在向量中找到唯一的条目或检查成员资格,并且使用像unique()
或逻辑索引之类的命令似乎通过向量搜索,并且对于大的值集来说真的很慢。在Matlab中最好的方法是什么?
例子
例如,假设我有一个素数列表,想检查3是否是素数:
primes = [2,3,5,7,11,13];
if primes(primes==3)
disp('yes!')
else
disp('no!')
end
如果我用长向量做这个,很多时候事情会变得很慢。
其他语言
所以基本上,在Matlab中有没有与python的
set()
和dict()
等价的东西,或者类似的Java的java.util.HashSet
和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集的构建也相当慢,因此根据问题的不同,这可能也相当慢很高兴看到集装箱。地图提示。它真的破坏了其他的例子,而且它是瞬间建立起来的。
最佳答案
这样地?
>> m = java.util.HashMap;
>> m.put(1,'hello,world');
>> m.get(1)
ans =
hello, world
或者,如果您想要一个Matlab本机实现,请尝试
>> m = containers.Map;
>> m('one') = 1;
>> m('one')
ans =
1
这实际上是键入的-它将接受的唯一键是
char
类型的键创建映射时可以指定键和值类型:>> m = containers.Map('KeyType','int32','ValueType','double');
>> m(1) = 3.14;
>> m(1)
ans =
3.14
如果您尝试放置除
int32
以外的任何键和除double
以外的任何值,则会出现错误。您还可以使用以下设置:
>> s = java.util.HashSet;
>> s.put(1);
>> s.contains(1)
ans =
1
>> s.contains(2)
ans =
0