为了账号安全,请及时绑定邮箱和手机立即绑定

MATLAB中的哈希表

MATLAB中的哈希表

侃侃无极 2019-11-08 10:46:28
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)。现在,我知道我不应该过早地进行优化,并且我可能根本不会遇到这个问题,但是请记住,这仅仅是背景,并且在某些情况下,这实际上是最好的解决方案,无论它是否是最佳解决方案。解决我的问题的最佳方法。
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

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滤镜)来计算滤镜掩码的大小,或者您可以在傅立叶空间中进行滤镜,这对于大图像以及方差为等距排列(很可能并非如此)。


查看完整回答
反对 回复 2019-11-08
?
繁花如伊

TA贡献2012条经验 获得超12个赞

考虑使用MATLAB的地图类:container.Map。这里是一个简短的概述:


创建:


>> keys = {'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', ...

  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Annual'};


>> values = {327.2, 368.2, 197.6, 178.4, 100.0,  69.9, ...

  32.3,  37.3,  19.0,  37.0,  73.2, 110.9, 1551.0};


>> rainfallMap = containers.Map(keys, values)


rainfallMap = 

  containers.Map handle

  Package: containers


  Properties:

        Count: 13

      KeyType: 'char'

    ValueType: 'double'

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

    ...

end


查看完整回答
反对 回复 2019-11-08
  • 3 回答
  • 0 关注
  • 996 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信