I have 1 row and 106 columns. Each cell contains various numbers. Some cells contain 1 number, some contain 5, etc. The problem is this: If one number is present, it looks great. Some cells have more than one number. I would like for the second number to go in the second row, third number in third row, etc. I am not sure how to do this. I am guessing I need to make a zeros matrix or something but I am not sure

댓글 수: 6

Azzi Abdelmalek
Azzi Abdelmalek 2014년 1월 13일
If M={1 [7 8] 3 [ 1 5 6] 0 [1 5 8] 2 10 }
What is the expected result?
Benjamin Cowen
Benjamin Cowen 2014년 1월 13일
I am not sure that I follow. If the cell in row 1, column is 5,6,7 I would like 5 to go in a new matrix in row 1 column 1, 6 to go in row 2, column 2 etc
Azzi Abdelmalek
Azzi Abdelmalek 2014년 1월 13일
You can simply post the expected result, if really you know what you want
Benjamin Cowen
Benjamin Cowen 2014년 1월 13일
I really do not know what you mean. The expected result is as follows. I have 106 columns and 1 row of cells. So there are 106 cells. Instead of some cells containing more than 1 number. So if A1 contains numbers 1,2,3 I would like to convert to matrix such that A1 = 1, A2 = 2, A3 = 3. But I have 106 of these and they are different lengths
Benjamin Cowen
Benjamin Cowen 2014년 1월 13일
Oh I see what you mean on your first comment. Instead of having multiple numbers in 1 cell, just 1 number in each cell. If a column has more than one number, just put next numbers in next rows
Benjamin Cowen
Benjamin Cowen 2014년 1월 13일
When I try A(1,j)=cat(1,C{1,j}), I get "Subscripted assignment dimension mismatch."

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

 채택된 답변

Azzi Abdelmalek
Azzi Abdelmalek 2014년 1월 13일

0 개 추천

You can do this
M={1 [7 8] 3 [ 1 5 6] 0 [1 5 8] 2 10 }
n=cellfun(@numel,M)
m=max(n);
N=cell(m,numel(M))
for k=1:numel(M)
N(1:n(k),k)=num2cell(M{k}')
end
The result
N =
[1] [7] [3] [1] [0] [1] [2] [10]
[] [8] [] [5] [] [5] [] []
[] [] [] [6] [] [8] [] []

추가 답변 (1개)

Matt J
Matt J 2014년 1월 13일

1 개 추천

Is this what you want?
>> C={5,[6 7 8], [9,10]};
>>cell2mat(C)
ans =
5 6 7 8 9 10
Or,
>> [C{:}]
ans =
5 6 7 8 9 10

댓글 수: 6

Benjamin Cowen
Benjamin Cowen 2014년 1월 13일
No. I want 5 to be in column 1, 6,7,8 to be in column 2. I just want the numbers to not be in the same cell. So the first column would have 1 row, the 2nd column would have 3
Matt J
Matt J 2014년 1월 13일
C={5,[6 7 8], [9,10]};
M=max(cellfun('length',C));
result = cell2mat(cellfun(@(c) pad(c,M), C, 'uni',0)),
function c=pad(c,M)
c=c(:);
c(M+1,1)=0;
c(end)=[];
end
Benjamin Cowen
Benjamin Cowen 2014년 1월 13일
I get: function definitions are not permitted in this context
Matt J
Matt J 2014년 1월 13일
편집: Matt J 2014년 1월 13일
Function definitions are not allowed inside script files or at the command line. You must do these operations inside a function file. Or, you must put the pad() function in its own file, somewhere visible to MATLAB.
Benjamin Cowen
Benjamin Cowen 2014년 1월 13일
So I just copy that whole thing into a function file?
Matt J
Matt J 2014년 1월 13일
Yes. That is one of your options.

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

카테고리

도움말 센터File Exchange에서 Multidimensional Arrays에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

질문:

2014년 1월 13일

댓글:

2014년 1월 13일

Community Treasure Hunt

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

Start Hunting!

Translated by