Zero pad vectors within cell array to make them equal length

Illustration
Yisroel - 2020-12-28T13:15:16+00:00
Question: Zero pad vectors within cell array to make them equal length

I have a cell array with vectors y1, y2, y3, y4, y5 which are of variable lengths. I get the maximum length among all elements in the cell array using:   sigvecarray = {y1, y2, y3, y4, y5}; [maxsamples, idx] = max(cellfun(@numel, sigvecarray)); Now, I need to zero pad the shorter vectors with the differrence from maxsmaples and their own sample numbers. I tried the following first:   signalvectors = {} for k = 1:numel(sigvecarray) currveclength = length(sigvecarray{k}) if currveclength < maxsamples padding = samples - currveclength signalvectors{k} = [sigvecarray{k}, zeros(padding, 1)] end end It gave me the follwing error:       Error using horzcat Dimensions of matrices being concatenated are not consistent. Then I tried the solution from the post here as follows: origsamplesarray = cellfun(@numel, sigvecarray); padfun = @(k) [sigvecarray{k} zeros(maxsamples(k) - origsamplesarray(k), 1)] ; signalvectors = arrayfun(padfun, 1:numel(sigvecarray) , 'un', 0); It gave me the following error: Error using horzcat Dimensions of matrices being concatenated are not consistent. Error in xcorr>@(k)[sigvecarray{k},zeros(maxsamples(k)-origsamplesarray(k),1)] What am I possibly doing wrong above?

Expert Answer

Profile picture of Neeta Dsouza Neeta Dsouza answered . 2025-11-20

I do not know what the dimensions of ‘sigvecarray’ are, however I assume they are all column vectors.
If so, replace the (,) with a (;) here, and it should work (unless there are also other problems):
 
signalvectors{k} = [sigvecarray{k}; zeros(padding, 1)]

All of these — including this:

padfun = @(k) [sigvecarray{k} zeros(maxsamples(k) - origsamplesarray(k), 1)] ;

function — are concatenating something with a column vector, that column vector being defined as:

zeros(maxsamples(k) - origsamplesarray(k), 1)
If ‘sigvecarray{k}’ is a row vector or even another column vector of a different length, that error will be thrown, since (,) is a horizontal concatenation operator.
If ‘sigvecarray{k}’ is a column vector (and that is still unknown), concatenate them vertically — not horizontally — using the (;) vertical concatenation operator:
padfun = @(k) [sigvecarray{k}; zeros(maxsamples(k) - origsamplesarray(k), 1)] ;
                             ↑ ← VERTICAL CONCATENATION OPERATOR


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!