创建包含单元阵列的单元时,避免在matlab中循环

创建包含单元阵列的单元时,避免在matlab中循环,matlab,indexing,containers,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}={{c

我正在尝试创建一个映射,其中有两个元素单元格数组作为值。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);

您可以将向量串联和
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