How to convert a cell to matrix?

조회 수: 1 (최근 30일)
SM
SM 2020년 7월 16일
편집: the cyclist 2020년 7월 16일
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