首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Matlab中存储字典的最有效方法

在Matlab中存储字典的最有效方法
EN

Stack Overflow用户
提问于 2016-09-08 07:51:57
回答 2查看 382关注 0票数 0

我有一组与成本相关的I,这只是一个双值。ID是整数和唯一的。两个ID可能有相同的成本。我把它们储存在:-

代码语言:javascript
运行
复制
a=containers.Map('KeyType','uint32','ValueType','double');
a(1)=7.3
a(2)=8.4
a(3)=7.3

现在我想找出最低的成本。

代码语言:javascript
运行
复制
b=[];
c=values(a);
b=[b,c{:}];
cost_min=min(b);

现在,我希望找到所有与ID相关的ID,即1和3,最低成本为7.3。我可以将所有的键收集到一个数组中,然后对这个数组执行一个for循环。是否有更好的方法在Matlab中完成整个工作,这样就不需要循环了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-08 08:35:50

对于这种操作,有一些方法可以在地图上使用。

http://se.mathworks.com/help/matlab/ref/containers.map-class.html

找到最小值和最小键的方法可以这样做,

代码语言:javascript
运行
复制
a=containers.Map('KeyType','uint32','ValueType','double');
a(1)=7.3;
a(3)=8.4;
a(4)=7.3;

minval = inf;
minkeys = -1;
for k = keys(a)
    val = a.values(k);
    val = val{1};
    if (val < minval(1))
        minkeys = k;
        minval = val;
    elseif (val == minval(1))
        minkeys = [minkeys,k];
    end
end

disp(minval);
disp(minkeys);

然而,这并不有效,而且价值搜索对于地图来说也是笨拙的。这不是他们的本意。地图应该进行有效的密钥查找。如果你要做大量的查找--这是需要时间的--那么使用一张地图。如果您需要进行大量的值搜索,我建议您为此使用一个矩阵(或两个数组)。

代码语言:javascript
运行
复制
idx = [1;3;4];
val = [7.3,8.3,7.3];
minval = min(val);
minidx = idx(val==minval);
disp(minval);
disp(minidx);

还有另一篇文章给出了一个例子,展示了如何将稀疏矩阵用作hashmap。让索引成为关键。这将占用大约3倍的内存,作为所有非零元素的普通数组,但地图使用的内存也比数组更多。

票数 0
EN

Stack Overflow用户

发布于 2016-09-08 08:14:37

稀疏矩阵可以作为hashmap工作,只需这样做:

代码语言:javascript
运行
复制
a= sparse(1:3,1,[7.3 8.4 7.3])
find(a == min(nonzeros(a))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39385401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档