# How to pad cell w/ multiple arrays with zeros

2 views (last 30 days)
m j on 27 Jul 2020
Commented: m j on 28 Jul 2020
Hello,
I have a cell array: myCell = {1,4}, each array inside the cell can be:
ex:
1500X1
2000X1
2048X1
3400X1
I would like to pad all arrays that dont equal max array length(3400) with zeros and plot. Im trying to use cellfun but am having trouble padding.I can find the max using cellfun easy with:
[s,d] = cellfun(@size,myCell);
outputMax = max([s,d]);
But am having trouble figuring out how to use cellfun ,now that I know what the MAX length is of my arrays....I tried padarray but failed miserably.Any ideas?
Thanks

madhan ravi on 27 Jul 2020
Edited: madhan ravi on 27 Jul 2020
M = max(cellfun(@length, myCell));
Wanted = cellfun(@(x) [x; zeros(M - numel(x), 1)], myCell, 'un', 0)

Show 1 older comment
m j on 28 Jul 2020
I got it to work and be plotted using code below, but im having a issue setting a plot inside a figure using:
set(hPlot3, 'Xdata',1:M,'Ydata',normWanted(:,:));
Heres code that I got to work and plot without a figure,plot handles:
And apologies,everytime I try to use the 'CODE' command/button on MATLABs website, the website freezes for me....Never had that issue before......
M = max(cellfun(@length, outCell));
padded = cellfun(@(x) [x; zeros(M - numel(x), 1)], outCell, 'un', 0);
%normalize by finding max val in each array
arrayOfmaxes = [];
for i = 1:size(B,2)
%get max of each array
currMax = max(B(:,i));
%store into array
arrayOfmaxes = [currMax arrayOfmaxes];
end
%now divide each array by its own MAX to normalize
normWanted = [];
temp= [];
for j = 1:size(B,2)
%divide by current arrayOfmaxes value and current signal
temp = (B(:,j)/arrayOfmaxes(1,(size(B,2)+1)-j));
normWanted = [temp normWanted];
end
figure();plot(normWanted);
madhan ravi on 28 Jul 2020
m j on 28 Jul 2020