MATLAB将单元格元素等同于数组

时间:2015-06-16 08:18:47

标签: matlab cell

我试图将每个元素等同于一个对应于单元格元素的数组。 为了更准确地解释它,例如

A    = {[1 1 1], [0 0 0 0 0], [1 1],[0 0 0 0 0]};
B    = [0 1 0 0];

所以我想要的是:

A= {[0 0 0],[1 1 1 1 1],[0 0],[0 0 0 0 0]};

for循环的可能解决方案是:

for ii=1:length(A)
     A{ii}(:)=B(ii);
end

是否有任何不使用循环的方法?

2 个答案:

答案 0 :(得分:3)

使用repelemmat2cell

lens = cellfun(@numel, A);

out = mat2cell(repelem(B,lens).*ones(1,sum(lens)),1,lens)

注意:

  1. cellfun正在变相循环。但是,这里cellfun已经习惯了 找到单独的元素数量。所以这可以考虑 几乎矢量化:P
  2. repelem功能在R2015a中引入。你可能无法做到 在以前的版本中运行它。相反,您可以创建自己的自定义repelem功能。请参阅this answer

答案 1 :(得分:1)

你可以这样做:

A=cellfun(@(x, y) repmat(y, size(x)), A, num2cell(B), 'uni', 0)

这样做的好处是可以处理A中任意大小或维度的矩阵。没有假设是矢量。