我试图将每个元素等同于一个对应于单元格元素的数组。 为了更准确地解释它,例如
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
是否有任何不使用循环的方法?
答案 0 :(得分:3)
lens = cellfun(@numel, A);
out = mat2cell(repelem(B,lens).*ones(1,sum(lens)),1,lens)
注意:
cellfun
正在变相循环。但是,这里cellfun
已经习惯了
找到单独的元素数量。所以这可以考虑
几乎矢量化:P repelem
功能在R2015a中引入。你可能无法做到
在以前的版本中运行它。相反,您可以创建自己的自定义repelem
功能。请参阅this answer 答案 1 :(得分:1)
你可以这样做:
A=cellfun(@(x, y) repmat(y, size(x)), A, num2cell(B), 'uni', 0)
这样做的好处是可以处理A
中任意大小或维度的矩阵。没有假设是矢量。