Clear Filters
Clear Filters

How to find the min values and their indices for a 2D array?

140 views (last 30 days)
I have the following 10x5 array: LLP
I want to get the min value of this array and all its induces. I mean (4,5), (5,1), (5,2)....and so on

Accepted Answer

Adam Danz
Adam Danz on 11 Sep 2023
Edited: Adam Danz on 11 Sep 2023
Find the minimum value using min and specify all dimensions. Then use find with two outputs to find the row and column indices of the matrix that equal the minimum value.
% demo data
m = [3 0 1 0 2; 2 2 0 0 3]
m = 2×5
3 0 1 0 2 2 2 0 0 3
minval = min(m,[],'all');
[row, col] = find(m == minval)
row = 4×1
1 2 1 2
col = 4×1
2 3 4 4
Common pitfalls
min() has a second output that returns the indicies of the min value but, by default, it will return the row index of the first matching minimum value for each column.
[minval, idx] = min(m)
minval = 1×5
2 0 0 0 2
idx = 1×5
2 1 2 1 1
You can specify the linear option to return the linear index rather than a row index but this will still return the first matching minimum for each column, not all matches of the global minimum.
[minval, idx] = min(m,[],'linear')
minval = 1×5
2 0 0 0 2
idx = 1×5
2 3 6 7 9
If you specify all dimensions, it will return the first match of the minimum value, with or without the linear option.
[minval, idx] = min(m,[],'all')
minval = 0
idx = 3
  5 Comments
ilyes louahem m'sabah
ilyes louahem m'sabah on 12 Sep 2023
now i have another matrix called f with the same dimension of m. I want to find the min of the values of f corresponding to the indices found in m. I mean the indices row and col .
I want something like this: min(f(row,col))
Adam Danz
Adam Danz on 12 Sep 2023
Convert the (row, col) subscript indices to a linear index using sub2ind. Demo:
m = [3 0 1 0 2; 2 2 0 0 3]
m = 2×5
3 0 1 0 2 2 2 0 0 3
minval = min(m,[],'all');
[row, col] = find(m == minval)
row = 4×1
1 2 1 2
col = 4×1
2 3 4 4
f = rand(size(m))
f = 2×5
0.0784 0.5513 0.4124 0.9789 0.3237 0.6348 0.8458 0.7896 0.7465 0.1948
ind = sub2ind(size(m),row,col);
f(ind)
ans = 4×1
0.5513 0.7896 0.9789 0.7465

Sign in to comment.

More Answers (0)

Products


Release

R2016a

Community Treasure Hunt

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

Start Hunting!