combine different size vectors into one matrix

43 次查看(过去 30 天)
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
any suggestions please.

采纳的回答

Chunru
Chunru 2021-9-17
编辑:Chunru 2021-9-17
% 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
  4 个评论

请先登录,再进行评论。

更多回答(1 个)

Matt J
Matt J 2021-9-17
编辑:Matt J 2021-9-17
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

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by