MATLAB是否支持哈希表?
我在Matlab中处理一个需要图像的比例空间表示的问题。为此,我创建了一个二维高斯滤波器,在一定范围内k
的方差为sigma*s^k
,然后依次使用每个滤波器来过滤图像。现在,我想要一些从k
到过滤图像的映射。
如果k
始终是整数,我只需创建一个3D数组,以便:
arr[k] = <image filtered with k-th guassian>
但是,k
不一定是整数,所以我不能这样做。我想做的是保留一个k
数组,这样:
arr[find(array_of_ks_ = k)] = <image filtered with k-th guassian>
乍一看似乎不错,不过我可能要用20或30个k
值进行几千次查找,我担心这会影响性能。
我想知道,如果我用某种散列表来完成这项工作,这样我的查找时间就不是O(n),而是O(1)。
现在,我知道我不应该过早地进行优化,我可能根本没有这个问题,但是请记住,这只是背景,可能有些情况下,这确实是最好的解决方案,而不管它是否是解决我的问题的最佳解决方案。
Matlab不支持哈希表。编辑直到r2010a,也就是说,请参见@Amro的答案。
为了加快查找速度,可以放下
find
,并使用LOGICAL INDEXING。或者
然而,在我使用Matlab的所有经验中,我从未遇到过查找成为瓶颈的问题。
为了加速你的特定问题,我建议要么使用增量过滤
假设
array_of_ks
按升序排序,GaussFilter根据方差计算滤波器掩码大小(当然,使用2个1D滤波器),或者您可以在Fourier空间中进行滤波,这对于大型图像尤其有用,如果方差间隔均匀(很可能不会很不幸)。Matlab R2008b(7.7)的新containers.Map类是java.util.Map接口的缩小版。它还具有与所有Matlab类型(例如Java Maps cannot handle Matlab structs)无缝集成的额外好处,以及Matlab7.10(R2010a)到specify data types的能力。
需要键值映射/字典的严肃的Matlab实现应该仍然使用Java的映射类(java.util.EnumMap、HashMap、TreeMap、LinkedHashMap或Hashtable)来获得更大的功能(如果不是性能的话)。早于R2008b的Matlab版本在任何情况下都没有真正的替代方案,必须使用Java类。
使用Java集合的一个潜在限制是它们不能包含非原始的Matlab类型,如结构。要克服这个问题,可以向下转换类型(例如,使用struct2cell或以编程方式),或者创建一个单独的Java对象,该对象将保存您的信息并将该对象存储在Java集合中。
您还可能有兴趣研究纯Matlab面向对象(基于类)哈希表实现,即available on the File Exchange。
考虑使用MATLAB的map类:containers.Map。以下是简要概述:
创建:
查找:
分配:
添加:
删除:
检查:
检查键:
相关问题 更多 >
编程相关推荐