matlab - 有没有办法在 matlab 中使用哈希表/ HashMap ?

标签 matlab data-structures

<分区>

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.HashSetjava.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 提示。它确实破坏了其他示例,而且设置也很迅速。

最佳答案

像这样?

>> 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

关于matlab - 有没有办法在 matlab 中使用哈希表/ HashMap ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12625629/

相关文章:

matlab - 如何从matlab将不同长度和不同数据类型的数据写入文本文件

c - 请就我应该使用哪种数据结构提出建议

matlab - 如何 "silence"一个Matlab函数?

python - 如何计算 MATLAB 中不包括周末的时间戳之间的营业时间?

c++ - 存储动态长度数据 'inside' 结构

PHP/MySQL 处理每行属性发生变化的 XML 数组

c - 三度树的递归和非递归遍历

javascript - 为什么 Javascript 中不经常使用链表

matlab - 如何创建一个对称矩阵,其中每行/列都是已知向量的子集

matlab - 根据 MA​​TLAB 中的数据值使用标记填充颜色