How to convert a cell to matrix?

조회 수: 1(최근 30일)
SM 2020년 7월 16일
편집: the cyclist 2020년 7월 16일
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
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
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;
%%%%%% 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,:)))
% Show that they're identical


Community Treasure Hunt

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

Start Hunting!

Translated by