我有一组与成本相关的I,这只是一个双值。ID是整数和唯一的。两个ID可能有相同的成本。我把它们储存在:-
a=containers.Map('KeyType','uint32','ValueType','double');
a(1)=7.3
a(2)=8.4
a(3)=7.3现在我想找出最低的成本。
b=[];
c=values(a);
b=[b,c{:}];
cost_min=min(b);现在,我希望找到所有与ID相关的ID,即1和3,最低成本为7.3。我可以将所有的键收集到一个数组中,然后对这个数组执行一个for循环。是否有更好的方法在Matlab中完成整个工作,这样就不需要循环了?
发布于 2016-09-08 08:35:50
对于这种操作,有一些方法可以在地图上使用。
http://se.mathworks.com/help/matlab/ref/containers.map-class.html
找到最小值和最小键的方法可以这样做,
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);然而,这并不有效,而且价值搜索对于地图来说也是笨拙的。这不是他们的本意。地图应该进行有效的密钥查找。如果你要做大量的查找--这是需要时间的--那么使用一张地图。如果您需要进行大量的值搜索,我建议您为此使用一个矩阵(或两个数组)。
idx = [1;3;4];
val = [7.3,8.3,7.3];
minval = min(val);
minidx = idx(val==minval);
disp(minval);
disp(minidx);还有另一篇文章给出了一个例子,展示了如何将稀疏矩阵用作hashmap。让索引成为关键。这将占用大约3倍的内存,作为所有非零元素的普通数组,但地图使用的内存也比数组更多。
发布于 2016-09-08 08:14:37
稀疏矩阵可以作为hashmap工作,只需这样做:
a= sparse(1:3,1,[7.3 8.4 7.3])
find(a == min(nonzeros(a))https://stackoverflow.com/questions/39385401
复制相似问题