MATLAB 将元胞元素等同于数组
MATLAB equating cell elements to array
我试图将每个元素等同于对应于单元格元素的数组。
为了更准确地解释它,例如
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
有没有不用循环的方法?
lens = cellfun(@numel, A);
out = mat2cell(repelem(B,lens).*ones(1,sum(lens)),1,lens)
注:
cellfun
伪装循环。但是,这里 cellfun
用于
单独查找元素的数量。所以这个可以考虑
几乎矢量化:P
repelem
功能在 R2015a 中引入。你可能无法
运行 这在以前的版本中。相反,您可以创建自己的自定义 repelem
函数。参考 this answer
你可以这样做:
A=cellfun(@(x, y) repmat(y, size(x)), A, num2cell(B), 'uni', 0)
这样做的优点是可以处理 A
中任何大小或维数的矩阵。没有关于矢量的假设。
我试图将每个元素等同于对应于单元格元素的数组。 为了更准确地解释它,例如
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
有没有不用循环的方法?
lens = cellfun(@numel, A);
out = mat2cell(repelem(B,lens).*ones(1,sum(lens)),1,lens)
注:
cellfun
伪装循环。但是,这里cellfun
用于 单独查找元素的数量。所以这个可以考虑 几乎矢量化:Prepelem
功能在 R2015a 中引入。你可能无法 运行 这在以前的版本中。相反,您可以创建自己的自定义repelem
函数。参考 this answer
你可以这样做:
A=cellfun(@(x, y) repmat(y, size(x)), A, num2cell(B), 'uni', 0)
这样做的优点是可以处理 A
中任何大小或维数的矩阵。没有关于矢量的假设。