Cell2mat - creating a matrix from mismatched cell sizes

조회 수: 20 (최근 30일)
Karen Hornsby
Karen Hornsby 2013년 1월 16일
답변: Samira Abedi 2019년 1월 2일
Does anyone know how to create a matrix from a cell array where some of the cells have different lengths? Basically my instrument got interrupted when writing it's output file and finished halfway through a line. I don't want to discard the file as it's 99% complete. Is there another command which selectively converts a given sample size of a cell?
  댓글 수: 4
Matt J
Matt J 2013년 1월 17일
If your data is initially acquired as a file, how did it get into cell array form? Why would you import the file to a cell array if you ultimately want it to be a vector?
Samira Abedi
Samira Abedi 2019년 1월 2일
I get the following error when applying the above code:
Attempt to grow array along ambiguous dimension.

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2013년 1월 17일
No, you cannot do that. So what you do instead is figure out where the smaller lines are and pad those rows with enough NaN to match the size of the other rows. Then you can cell2mat()
  댓글 수: 3
Walter Roberson
Walter Roberson 2013년 1월 17일
prevlen = sum(cellfun(@length, C(end-1,:)));
lastlen = sum(cellfun(@length, C(end,:))));
C{end,end} = [C{end,end}, NaN(1,prevlen - lastlen)];
mat2cell(C)
Joel Torby
Joel Torby 2018년 5월 22일
C=yourCellArrayWithDifferentSizes;
maxLengthCell=max(cellfun('size',C,2)); %finding the longest vector in the cell array
for i=1:length(C)
for j=cellfun('size',C(i),2)+1:maxLengthCell
C{i}(j)=0; %zeropad the elements in each cell array with a length shorter than the maxlength
end
end
A=cell2mat(C); %A is your matrix

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Jan
Jan 2013년 1월 17일
What do you want as output for:
C = {[], 1, 1:2}
?
  댓글 수: 2
Karen Hornsby
Karen Hornsby 2013년 1월 17일
Do you mean that the code above removes row 1 of column 1&2?
Jan
Jan 2013년 1월 17일
No, "C" is a cell, which contains vectors of different length. Simply copy it to the command window and run it. It is exactly what you have explained by:
... a cell array where some of the cells have different lengths?
Now you ask us for creating a matrix from such an input. So how should the output look like in this case?

댓글을 달려면 로그인하십시오.


Samira Abedi
Samira Abedi 2019년 1월 2일
I get the following error when I apply the suggested method:
Attempt to grow array along ambiguous dimension.

카테고리

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