如何在Matlab中填充单元格数组

时间:2014-03-16 19:05:36

标签: matlab

有人知道如何填充细胞阵列吗?对于常规(多维)数组,我可以使用函数

   A = padarray(A,dim,value)

然而它不会接受细胞...... 一直在搜索,但我在文档或谷歌中找不到任何东西,我想在尝试重新编程padarray()接受细胞之前我会问...如果有人知道如何做到这一点,那将非常感激。

2 个答案:

答案 0 :(得分:1)

您始终可以使用cellfun将函数应用于单元格数组中的每个单元格:

padize = 2;
A = cellfun( @(x) padarray(x,padsize), A ,'uni', 0);

答案 1 :(得分:0)

我非常确定常规Matlab对于单元数组没有任何意义,就像它没有数字数据一样(padarray属于图像处理工具箱)。这有多难取决于你需要它的通用性 - 基本的对称空填充固定数量维度案例是微不足道的:

function y = padcell2d(x, r)
y = cell(size(x) + r.*2);
y(r+1:end-r, r+1:end-r) = x;
end

根据需要添加复杂性。


因为想到处理任意维度的最简单方法很有趣,所以这里有一个非常简单的n维对称空填充方式,没有循环(在Octave上测试):

function x = padcell(x, r)
if any(r>0) && ~any(r<0)
  if isscalar(r)    % otherwise, assume it's a value-per-dimension vector
    r = repmat(r, 1, ndims(x));
  end
  sz = num2cell(size(x) + 2*r);
  x{sz{:}} = [];     % hooray for comma-separated lists!
  x = circshift(x, r);
end
end