登录论坛

查看完整版本 : MATLAB中的哈希表


poster
2019-12-10, 20:48
MATLAB是否支持哈希表?

一些背景

我正在研究Matlab中需要图像的比例空间表示的问题。为此,我创建了一个二维高斯滤波器,其中k在一定范围内具有方差sigma*s^k ,然后依次使用每个高斯滤波器对图像进行滤波。现在,我想要某种从k到过滤图像的映射。

如果k始终是整数,我将简单地创建一个3D数组,使得:

arr[k] = 但是, k不一定是整数,所以我不能这样做。我想做的是保留一个k数组,使得:

arr[find(array_of_ks_ = k)] = 乍一看似乎很不错,除了我可能会用大约20或30的k值进行数千次查找,而且我担心这会影响性能。

我想知道是否最好用某种哈希表来完成此操作,以便查找时间为O(1)而不是O(n)。

现在,我知道我不应该过早地进行优化,并且我可能根本不会遇到这个问题,但是请记住,这仅仅是背景,并且在某些情况下,这实际上是最好的解决方案,无论它是否是最佳解决方案。解决我的问题的最佳方法。



回答:

Matlab不支持哈希表。 编辑直到r2010a,即;参见@Amro (https://stackoverflow.com/questions/3591942/hash-tables-in-matlab/3592050#3592050)的答案。

为了加快查找速度,您可以删除find ,然后使用LOGICAL INDEXING (http://www.mathworks.com/access/helpdesk/help/techdoc/math/f1-85462.html) 。

arr{array_of_ks==k} = 要么

arr(:,:,array_of_ks==k) = 但是,根据我在Matlab上的所有经验,我从来没有遇到过瓶颈。

为了加快您的特定问题的速度,建议您使用增量过滤

arr{i} = GaussFilter(arr{i-1},sigma*s^(array_of_ks(i)) - sigma*s^(array_of_ks(i-1))) 假设array_of_ks按升序排序,并且GaussFilter根据方差(当然使用2个1D滤镜)计算滤镜掩码大小,或者您可以在傅立叶空间中滤镜,这对于大图像和方差特别有用间距均匀(很可能并非如此)。



更多&回答... (https://stackoverflow.com/questions/3591942)