在创建包含单元格数组的单元格时,避免在matlab中循环

时间:2017-05-04 13:40:56

标签: matlab indexing containers

我正在尝试创建一个具有双元素单元格数组作为值的地图。 Map期望键和值具有相同数量的元素。这段代码将这些单元格数组打包成循环中的单元格,但我怀疑它可以以某种方式简化。示例代码:

cells1={'foo1';'foo2';'foo3'};
cells2={'bar1';'bar2';'bar3'};
cells3={'baz1';'baz2';'baz3'};
values=cell(size(cells1));
for ii=1:size(cells1,1)
  values{ii}={{cells2{ii},cells3{ii}}};
end
keys=cells1;
containers.Map(keys,values);

1 个答案:

答案 0 :(得分:1)

你可以使用向量连接和num2cell和第二维参数(如果你想获得相同的结果,可以使用两次):

% your code
cells1={'foo1';'foo2';'foo3'};
cells2={'bar1';'bar2';'bar3'};
cells3={'baz1';'baz2';'baz3'};
values=cell(size(cells1));
for ii=1:size(cells1,1)
    values{ii}={{cells2{ii},cells3{ii}}};
end
% simplified
c = num2cell(num2cell([cells2,cells3],2),2);
% you can also do c = num2cell([cells2,cells3],2); which isn't identical but may be suficcient
isequal(c,values) % yes