我有一组与费用相关的ID,这只是一个双倍价值。 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,即1和3,最低成本即7.3。我可以将所有键收集到一个数组中,然后对该数组进行for循环。有没有更好的方法在Matlab中完成这一切,以便不需要for循环?
答案 0 :(得分:2)
稀疏矩阵可以作为哈希映射,只需这样做:
a= sparse(1:3,1,[7.3 8.4 7.3])
find(a == min(nonzeros(a))
答案 1 :(得分:0)
有些方法可以在地图上用于此类操作
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);
还有另一篇文章,其中展示了如何将稀疏矩阵用作散列图。让索引成为关键。这将占用大约3倍的内存,因为所有非零元素都是普通数组,但是地图使用的内存也比数组多。