如何在matlab中使单元格数组大小相等

时间:2016-06-06 11:06:29

标签: matlab

我有一个单元格数组。例如,此单元格的维度为[2x3 , 3x3 , 2x4]。我想找到这个数组的最大大小,并使这个单元格数组大小相同。我想将零添加到最小单元格大小,使其等于最大单元格大小。

我尝试使用此代码:

sz = cellfun(@(x)size(x,2), A);
minLength = min(sz);
B = cell2mat(cellfun(@(x)x(1:minLength), A, 'uniformoutput', false));'

但它不起作用。如果有人帮助我,那将是件好事。

1 个答案:

答案 0 :(得分:1)

这应该有效

A = {rand(2,3), rand(3,3), rand(2,4)}
% Find the maximum numbers rows (dims(1)) and the maximum number of columns (dims(2))
dims = max(cell2mat(cellfun(@(x)size(x), A, 'uni', 0)'));
%Pad each element of A with zeros so that it's size becomes dims
B = cellfun(@(x)[x,zeros(size(x,1),dims(2)-size(x,2));zeros(dims(1)-size(x,1),dims(2))], A,'uni', 0)

这导致

B = 

    [3x4 double]    [3x4 double]    [3x4 double]

更具体地说:

>> B{1}

ans =

    0.9028    0.5791    0.0366         0
    0.5763    0.0658    0.3373         0
         0         0         0         0

>> B{2}

ans =

    0.0764    0.1326    0.4413         0
    0.2463    0.0238    0.3726         0
    0.0299    0.2610    0.1408         0

>> B{3}

ans =

    0.6266    0.6141    0.5653    0.5951
    0.3176    0.0741    0.5795    0.2600
         0         0         0         0