combine different size vectors into one matrix

6 views (last 30 days)
Suzuki on 17 Sep 2021
Commented: Suzuki on 17 Sep 2021
I need to combine sets of data I have together into one matrix, but they have different dimensions.
this is a simplified example:
e=[2 3 4 5];
>> ee=[4 7 7];
>> eee=[8 8 7 4 2 5];
>> p=[e; ee; eee];
I want to fill nan to make them even, but I don't know how.
I want each vector to be in a raw, so I get something like that
p=[2 3 4 5 NaN NaN;
4 7 7 NaN NaN NaN;
8 8 7 4 2 5];
then I want to get the mean for each column data

Chunru on 17 Sep 2021
Edited: Chunru on 17 Sep 2021
% use a cell array instead of separate variables
e{1}=[2 3 4 5];
e{2}=[4 7 7];
e{3}=[8 8 7 4 2 5];
% find the longest vector
l = max(cellfun(@(x) length(x), e))
l = 6
y = nan(length(e), l);
for i=1:length(e)
y(i, 1:length(e{i})) = e{i};
end
y
y = 3×6
2 3 4 5 NaN NaN 4 7 7 NaN NaN NaN 8 8 7 4 2 5
ym = mean(y, 1, 'omitnan') % mean along 1st dimension or column
ym = 1×6
4.6667 6.0000 6.0000 4.5000 2.0000 5.0000
Suzuki on 17 Sep 2021
right, thanks alot.

Matt J on 17 Sep 2021
Edited: Matt J on 17 Sep 2021
I will assume you have the vectors in a cell array
C={[2 3 4 5];
[4 7 7];
[8 8 7 4 2 5]}
C = 3×1 cell array
{[ 2 3 4 5]} {[ 4 7 7]} {[8 8 7 4 2 5]}
Then, you can simply do,
z=max(cellfun('length',C));
p=cell2mat( cellfun(@(x)[x,nan(1,z-numel(x) )] ,C,'uni',0))
p = 3×6
2 3 4 5 NaN NaN 4 7 7 NaN NaN NaN 8 8 7 4 2 5
Suzuki on 17 Sep 2021
thank you very much.
I works, but it fill them all in one row.