gpt4 book ai didi

matlab - 在 Matlab 中按键合并 map 元胞数组

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:44 24 4
gpt4 key购买 nike

给定一个包含给定事件(键)的计数(值)的 containers.Map 对象的元胞数组。我想得到一个包含每个键(或允许我计算计数的东西)的计数总和(作为值)的 map 。

例如:

maps = { containers.Map({'a','b'},{1,2}),
containers.Map({'b','c'},{4,1}) };

mergeMaps(maps)

ans = Map(a -> 1, b -> 6, c -> 1)

到目前为止我唯一能想到的是:

maps = { ... };
res = containers.Map();
for cMapC = maps
cMap = cMapC{1};
for cKeyC = keys(cMap{1})
cKey = cKeyC{1};
if isKey(res, cKey)
res(cKey) = res(cKey) + cMap(cKey);
else
res(cKey) = cMap(cKey);
end
end
end

哪个应该有效(未经测试),但至少可以说其“效率”和可读性值得怀疑。什么是更好的解决方案?

请注意,目前没有归因于事件的索引,因此使用稀疏矩阵代替 map 很麻烦。

最佳答案

不确定可读性,但它可能更有效:

allKeys0   = cellfun(@keys, maps, 'UniformOutput', false);
[allKeys, ~, m] = unique([allKeys0{:}]);
allValues0 = cellfun(@values, maps, 'UniformOutput', false);
allValues = cell2mat([allValues0{:}]);
sumValues = arrayfun(@(x) sum(allValues(m==x)), 1:numel(allKeys));

mergedMap = containers.Map(allKeys, sumValues);

关于matlab - 在 Matlab 中按键合并 map 元胞数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15648524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com