I have a small problem today.
I have gotten a struct that's 1x30 and it's just 30 values in the one column. It shoudn't be so hard but I need to find the max values of these. But somehow I cant do this.
Simple question, but today I can't do anything.

 채택된 답변

Image Analyst
Image Analyst 2020년 5월 5일

1 개 추천

Try using the brackets trick to extract the values out of the fields and concatenate into a vector:
allValues = [yourStructure.yourFieldName]
maxValue = max(allValues)
If your field is a row vector instead of a scalar, use vertcat():
allValues = vertcat(yourStructure.yourFieldName)
columnMaxValues = max(allValues, 1) % Max going down all the columns
rowMaxValues = max(allValues, 2) % Max going across all the rows.

추가 답변 (2개)

Johannes Rebling
Johannes Rebling 2020년 5월 5일
편집: Johannes Rebling 2020년 5월 5일

1 개 추천

max([Struct(:).yourData])

댓글 수: 2

Tracy
Tracy 2023년 9월 27일
Thank you! had thesame problem and surprisingly this works perfectly. cant beleive it was such a simple fix.
@Tracy yes, and it could be simpler. Note in my Accepted Answer above I don't use (:) because it's unnecessary if the values are simply scalars. And you will want to assign the output of max() to some variable (like I did above). Otherwise it's just basically thrown away and you can't use it. Above I essentially did
maxValue = max([yourStructure.yourFieldName])
Or for his code...
Struct(1).yourData = 1;
Struct(2).yourData = 2;
maxValue = max([Struct.yourData]) % No (:) needed. And save the max value for use in subsequent code.

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

Peter O
Peter O 2020년 5월 5일
편집: Peter O 2020년 5월 5일

0 개 추천

If I'm understanding correctly, you have a struct array, s, of size 1x30, with a single field (let's call it x). Something like
s(1).x= 10
s(2).x = 11
...
s(30).x = 1.123
Use arrayfun to access the field of each struct in the array. Because there's a uniform output, you'll get a vector output. Then take the max:
max(arrayfun(@(z) z.x, s))
Alternatively, use the colon operator to access each element, turn it into a single array using the brackets, and then take the max:
max([s(:).x])
Hope this helps!

댓글 수: 1

Image Analyst
Image Analyst 2020년 5월 5일
Like I showed in my answer, the (:) is unneeded.

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

카테고리

도움말 센터File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

질문:

FV
2020년 5월 5일

댓글:

2023년 9월 27일

Community Treasure Hunt

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

Start Hunting!

Translated by