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?
Neeta Dsouza answered .
2025-11-20
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)
padfun = @(k) [sigvecarray{k}; zeros(maxsamples(k) - origsamplesarray(k), 1)] ;
↑ ← VERTICAL CONCATENATION OPERATOR