How to convert a cell to matrix?

1 次查看(过去 30 天)
Example:
A={[1 3 4];
[2 5 6 4];
[2 6 8 9 5 6];
[3 6 5 4 1]}
I know it is not possible by using
B=cell2mat(A);
as it has different array size.
We may use NaN to follow concatenation rules.
How can I do that?
Once converted to matrix, How can I come back to same cell from the matrix?
  2 个评论
the cyclist
the cyclist 2020-7-16
For that input A, what exactly do you want the output to be? For example, do you want
B=[1 3 4 NaN NaN NaN;
2 5 6 4 NaN NaN;
2 6 8 9 5 6;
3 6 5 4 1 NaN]
?
SM
SM 2020-7-16
Yes, First i want what you have written. Second, I want to come back from B to A.

请先登录,再进行评论。

采纳的回答

Akira Agata
Akira Agata 2020-7-16
编辑:Akira Agata 2020-7-16
How about the following way?
% Convert to numeric array
maxLen = max(cellfun(@numel,A));
A = cellfun(@(x)[x, NaN(1,maxLen - numel(x))],A,'UniformOutput',false);
B = cell2mat(A);
% Back to cell array
A2 = mat2cell(B,ones(1,size(B,1)));
A2 = cellfun(@rmmissing,A2,'UniformOutput',false);

更多回答(1 个)

the cyclist
the cyclist 2020-7-16
编辑:the cyclist 2020-7-16
Here is one straightforward way:
% Original data
A={[1 3 4];
[2 5 6 4];
[2 6 8 9 5 6];
[3 6 5 4 1]};
%%%%%% Convert to B
% Get number of rows of A, and the maximum vector length within A
M = numel(A);
N = max(cellfun(@numel,A));
% Preallocate B to the correct size
B = nan(M,N);
% Fill each row of B with the corresponding row of A
for im = 1:M
Arow = A{im};
B(im,1:numel(Arow)) = Arow;
end
%%%%%% Convert B back to A
% Preallocate A2 to the correct number of rows
M2 = size(B,1);
A2 = cell(M2,1);
% Fill A2 with the non-NaN elements of B
for im = 1:M2
A2{im} = B(im,~isnan(B(im,:)))
end
% Show that they're identical
isequal(A,A2)

类别

Help CenterFile Exchange 中查找有关 Data Type Conversion 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by