MATLAB: How to find minimum from a group and index at which minimum value is obtained

accumarrayindexingminimum value

Hello all,
I have a matrix Engine_data_temp whose 5th column contains values of time (eg: 1;1;1;2;2…600) and 10th column contains values of fuel consumption. I am currently using code shown below to find unique value of time and minimum value of fuel consumed at that time:
(As suggested my one of the community member)
[uniqueT,~,jk]=unique(Engine_data_temp(:,5));
minFc=accumarray(jk,Engine_data_temp(:,10),[],@min);
I also need to find the index at which min values of fuel consumption are being selected at each unique time instances because I need this index to access other columns in matrix Engine_data_temp.
Thank you!

Best Answer

Create a small function
function r = min_and_idx(x)
[minx, minidx] = min(x);
r = {minx, minidx};
Then you use
minFc = accumarray(jk, Engine_data_temp(:,10), [], @min_and_idx, {});
The result will be a cell array in which some entries might be empty, but if they are not empty then they will be a cell with minimum value and the index of the value relative to the locations that share the same jk value.
Related Question