MATLAB Answers

Find maximum value of array within specified range, consecutively

67 views (last 30 days)
Tessa Kol
Tessa Kol on 22 Aug 2020
Commented: Tessa Kol on 23 Aug 2020
I have a 3384x5 array of which the first and last 20 rows are shown in the pictures below.
Problem: I want to find the maximum value of column 3 within the specified range of column 2.
Problem example:
In the 2th column I have specified a range from 0.0 until 0.011.
Within this range of the 2th column I go to the 3th column. In the 3th column I search for the maximum value which corresponds to the value of the 2th column.
When the maximum value in the 3th column has been found with the corresponding value of the 2th column, than there will be a new range specified in the 2th column. The new range will be from 0.011 until 0.022, so the range increases with 0.011 every time.
Within the new range (0.011 until 0.022) I go again to the 3th column and search for the maximum value with the corresponding value of the 2th column
This loop continues until the last possible range in the 2th column is reached.
Result: All the maximum values found with the corresponding value of the 2th column have to be stored in a new array or matrix.
Until now I have not been able to solve this problem. Any solution and/or help would be very appreciated.

  0 Comments

Sign in to comment.

Accepted Answer

Cris LaPierre
Cris LaPierre on 22 Aug 2020
Assuming you know the ranges a priori, something like this might work. Note that I haven't tested this as I'm not going to try to transcribe your data.
% Define edges of ranges
rng = 0:0.011:0.2090
% Assign the data in column 2 to a predefined range
G = discretize(data(:,2),rng);
% Find the max value in each range
rMax = splitapply(@max,data(:,3),G)

  3 Comments

Tessa Kol
Tessa Kol on 22 Aug 2020
Thank you very much!
This code succesfully returned all the maximum values within the defined range. But how can I retrieve the values from the 2th column that correspond to these obtained maximum values?
Cris LaPierre
Cris LaPierre on 22 Aug 2020
Add this line of code at the bottom.
col2val = splitapply(@(x,y) {x(y==max(y))},data(:,2),data(:,3),G)

Sign in to comment.

More Answers (1)

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!