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的答案。
为了加快查找速度,您可以删除find ,然后使用
LOGICAL INDEXING 。
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滤镜)计算滤镜掩码大小,或者您可以在傅立叶空间中滤镜,这对于大图像和方差特别有用间距均匀(很可能并非如此)。
更多&回答...