MATLAB中的哈希表

MATLAB是否支持哈希表?


一些背景

我正在研究Matlab中需要图像的比例空间表示的问题。要做到这一点,我创建一个2-d高斯滤波器具有方差sigma*s^k为k在一定范围内。,然后我使用依次每一个来过滤所述图像。现在,我想要某种映射k到已过滤的图像。


如果k始终是整数,则只需创建一个3D数组即可:


arr[k] = <image filtered with k-th guassian>

但是,k不一定是整数,所以我不能这样做。我想做的是保留一个ks 数组:


arr[find(array_of_ks_ = k)] = <image filtered with k-th guassian>

乍看之下似乎还不错,除了我可能会使用大约20或30的值进行数千次查找k,而且我担心这会影响性能。


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


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


侃侃无极
浏览 999回答 3
3回答

慕姐4208626

Matlab不支持哈希表,为了加快查找速度,您可以删除find和使用LOGICAL INDEXING。arr{array_of_ks==k} = <image filtered with k-th Gaussian>要么arr(:,:,array_of_ks==k) = <image filtered with k-th Gaussian>但是,根据我在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滤镜)来计算滤镜掩码的大小,或者您可以在傅立叶空间中进行滤镜,这对于大图像以及方差为等距排列(很可能并非如此)。

繁花如伊

考虑使用MATLAB的地图类:container.Map。这里是一个简短的概述:创建:>> keys = {'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', ...&nbsp; 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Annual'};>> values = {327.2, 368.2, 197.6, 178.4, 100.0,&nbsp; 69.9, ...&nbsp; 32.3,&nbsp; 37.3,&nbsp; 19.0,&nbsp; 37.0,&nbsp; 73.2, 110.9, 1551.0};>> rainfallMap = containers.Map(keys, values)rainfallMap =&nbsp;&nbsp; containers.Map handle&nbsp; Package: containers&nbsp; Properties:&nbsp; &nbsp; &nbsp; &nbsp; Count: 13&nbsp; &nbsp; &nbsp; KeyType: 'char'&nbsp; &nbsp; ValueType: 'double'&nbsp; Methods, Events, Superclasses抬头:x = rainfallMap('Jan');分配:rainfallMap('Jan') = 0;加:rainfallMap('Total') = 999;去掉:rainfallMap.remove('Total')检查:values = rainfallMap.values;keys = rainfallMap.keys;sz = rainfallMap.size;确认码:if rainfallMap.isKey('Today')&nbsp; &nbsp; ...end
打开App,查看更多内容
随时随地看视频慕课网APP