【发布时间】:2018-12-23 07:25:48
【问题描述】:
我在 matlab 中有一个大地图,想遍历它的所有键。 但是我只能先为键存储一个单元格并遍历该单元格,这需要内存来存储所有键。 而在python中,生成器/迭代器可以在循环中顺序返回列表的索引或条目,这不会占用太多内存。
在matlab中,我尝试了for循环:
% Let MAP is a containers.Map with 10000000 keys.
keys = MAP.keys;
for keyIdx = 1:size(keys,2)
MAP(keys{1,keyIdx});
end
在 python 中,for 循环与迭代器:
% Let MAP is a dictionary with 10000000 keys.
for key in MAP.iterkeys():
MAP[key]
那么,当我处理地图时,matlab 中的 python 中是否有类似的生成器/迭代器来节省内存?
【问题讨论】:
-
这在纯 MATLAB 中不存在。但正如question 中所述,您可以自己实现它
-
请注意,MATLAB 使用惰性复制,这意味着,只要您不修改
keys,它将指向存储映射中键的同一内存。除非内存不足,否则不要担心 MATLAB 的内存使用情况! :) -
Thank you@CrisLuengo.
keys = MAP.keys实际上会消耗内存来存储cell键,而我无法直接使用MAP.keys(idx)或MAP.keys{idx}遍历键. -
我没有收到您的评论通知,请确保
@之前有一个空格! -
我说的是
keys = MAP.keys不会占用任何额外的内存,因为单元格数组keys将指向与存储在MAP中的键相同的内存.在您尝试修改副本之前,MATLAB 不会复制数据。
标签: matlab dictionary memory-management iterator key