How can I make each cell array consistent in length?
26 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Zara Khan
el 7 de Mzo. de 2019
Comentada: Zara Khan
el 19 de Mzo. de 2019
In a cell array each element is 1Xlength. This length is not equal. I want to get the maximum length and then want to make each cell with same length by padding zeros in it.
0 comentarios
Respuesta aceptada
Jos (10584)
el 18 de Mzo. de 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)
5 comentarios
Jos (10584)
el 19 de Mzo. de 2019
After you calculated the new N you can use this:
tf = ~(N < M) % true for the large cells
newN(tf) = N(tf) % reset to the old lengths
Más respuestas (3)
tmarske
el 7 de Mzo. de 2019
Editada: tmarske
el 7 de Mzo. de 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 comentarios
Jos (10584)
el 18 de Mzo. de 2019
Your question reads otherwise ... " I want to get the maximum length and then want to make each cell with same length by padding zeros in it.
Jos (10584)
el 7 de Mzo. de 2019
Editada: Jos (10584)
el 8 de Mzo. de 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)
6 comentarios
Jos (10584)
el 8 de Mzo. de 2019
My mistake, should be square brackets of course ... (I edited my answer).
(assuming you also downloaded and installed the function)
Jos (10584)
el 18 de Mzo. de 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)
3 comentarios
Jos (10584)
el 18 de Mzo. de 2019
I do not get this error in the above code for a cell array like this
C = {[1 0 0 1], [0 1] ; [1 0 1 0], [0 0 1]}
You should give more details about the error and the input ...
Ver también
Categorías
Más información sobre Image Data Workflows en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!