Zero pad vectors within cell array to make them equal length

Technical Source
2 min readDec 28, 2020

--

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?

ANSWER

Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.

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)

READ MORE:

https://www.matlabsolutions.com/resources/zero-pad-vectors-within-cell-array-to-make-them-equal-length.php

--

--

Technical Source
Technical Source

Written by Technical Source

Simple! That is me, a simple person. I am passionate about knowledge and reading. That’s why I have decided to write and share a bit of my life and thoughts to.

No responses yet