Find minimum value within struct

Hi
I'm trying to determine the minimum value within a struct. I have a data struct with subfields which are timestamped. I'd like to find the smallest time, then reference all the other data accordingly.
example of the data:
  • data.val1.time = something
  • data.val2.time = something else
  • .
  • .
  • data.valN.time = something else
I can think of a brute force way of doing it, but I'm thinking that there should be a nicer way.
anyone have any ideas?

댓글 수: 1

Jan
Jan 2011년 8월 3일
Are "val1", "val2", ... the real field names? Then I strongly recommend to use an array instead: val(1), val(2), ... This will make the conversion of the subfield .time much easier.

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

 채택된 답변

Friedrich
Friedrich 2011년 8월 3일

0 개 추천

Hi,
I think you have to convert from a structure to an array. Maybe like this:
>> data.a = 1;
>> data.b = 2;
>> data.c = 3;
>> min(cell2mat(struct2cell(data)))

댓글 수: 2

Friedrich
Friedrich 2011년 8월 3일
for your struct more ugly:
min(cell2mat(struct2cell(cell2mat(struct2cell(data)))))
Jan
Jan 2011년 8월 3일
I assume this is faster:
C = struct2cell(data);
min([C{:}])

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

추가 답변 (1개)

Sean de Wolski
Sean de Wolski 2011년 8월 3일

0 개 추천

min(structfun(@min,data));
is significantly faster on my machine. Conversions to and from cells take awhile.

댓글 수: 1

Jan
Jan 2011년 8월 3일
STRUCT2CELL is surprisingly fast, because the underlying representation is almost equivalent: Only the list of field names is different.
But CELL2MAT is slow, because it does not pre-allocate sufficiently. Anyhow, for 3 or 100 fields the speed will not be too important.

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

카테고리

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

제품

질문:

2011년 8월 3일

Community Treasure Hunt

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

Start Hunting!

Translated by