# How can I make each cell array consistent in length?

59 views (last 30 days)

Show older comments

##### 0 Comments

### Accepted Answer

Jos (10584)
on 18 Mar 2019

A final attempt to answer this question :-)

C = {1:4 1:2 ; 1:5 1:6 ; 1 1:3} % a m-by-n cell array

N = cellfun(@numel, C) % old lengths of cell elements

M = 3 ; % new length should be multiple of M

newN = M * ceil(N / M) % new lengths of cell elements

padfun = @(k) [C{k} zeros(1, newN(k) - N(k))] ;

C2 = arrayfun(padfun, 1:numel(C) , 'un', 0) ; % apply padding to all elements of C

C2 = reshape(C2, size(C)) % reshape (if needed)

### More Answers (3)

tmarske
on 7 Mar 2019

Edited: tmarske
on 7 Mar 2019

%set up a dummy example

tst = {[1 1], [1 1 1 1 1], [1 1 1], [1]}

%get the maximum length

maxlen = max(cellfun(@length, tst))

%pad zeros

tstPadded = cellfun(@(x)([x zeros(1, maxlen - length(x))]), tst, 'UniformOutput', false)

##### 13 Comments

Jos (10584)
on 18 Mar 2019

Jos (10584)
on 7 Mar 2019

Edited: Jos (10584)
on 8 Mar 2019

If you make them the same length, you can also store them in a matrix. In that case, my PADCAT function is your friend :-)

C = {[1 2] ; 1 ; [1 2 3]}

[M, tf] = padcat(C{:}) % pads with NaNs

M(~tf) = 0

PADCAT can be found on the File Exchange, for free:

(edited answer)

Jos (10584)
on 18 Mar 2019

C = {1:3 4 ; 5:9 10:12 ; 13:14 15} % a m-by-n cell array

N = cellfun(@numel, C)

maxN = max(N(:))

padfun = @(v) [v zeros(1, maxN - numel(v))] ;

C2 = cellfun(padfun, C , 'un', 0)

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!