how to make computations with a cell array?

조회 수: 9 (최근 30일)
simo borto
simo borto 2015년 1월 29일
편집: Michael Haderlein 2015년 1월 29일
I have a cell array:
results = {5,2};
that is:
results =
[1x5 double] [1x1 prob.NormalDistribution ]
[1x5 double] [1x1 prob.tLocationScaleDistribution]
[1x5 double] [1x1 gmdistribution ]
[1x5 double] [1x1 gmdistribution ]
[1x5 double] [1x1 struct ]
so there is 5 vectors made of 5 doubles (but the number of vectors is not important). Writing something like:
results{3,1}(2) = 3;
there are no problems: the second place of the third vector of the "first column" of the cell array becomes equal to 3.
My purpose is to compute the minimum value of the fifth places of all the vectors (in the first column of the cell array)
I have tried with:
lower = min(results{:,1}(5));
And it gives:
Bad cell reference operation.
I have tried very different ways to obtain something, but always the same error.
Is there a simple solution to my problem? Thank you in advance

채택된 답변

Guillaume
Guillaume 2015년 1월 29일
편집: Guillaume 2015년 1월 29일
Yes, you can't do that. Mostly because
result{:, 1}
expands into a comma separated list which of course can't be indexed.
If all the vectors of column 1 are the same size, then the simplest thing is to convert that cell column into a matrix, and then operate on a matrix:
col1 = cell2mat(results(:, 1));
lower = min(col1(:, 5))
If the vectors are not the same size, cell2mat won't work and you have to use cellfun to extract this fifth element:
lower = min(cellfun(@(v) v(5), results(:, 1)))

추가 답변 (1개)

Michael Haderlein
Michael Haderlein 2015년 1월 29일
편집: Michael Haderlein 2015년 1월 29일
Dear Simo,
min(cellfun(@(x) x(5),results(:,1)))
does the job.
Best regards,
Michael

카테고리

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