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

33 ビュー (過去 30 日間)
ilyes louahem m'sabah
ilyes louahem m'sabah 2023 年 9 月 11 日
コメント済み: Adam Danz 2023 年 9 月 12 日
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

採用された回答

Adam Danz
Adam Danz 2023 年 9 月 11 日
編集済み: Adam Danz 2023 年 9 月 11 日
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 件のコメント
ilyes louahem m'sabah
ilyes louahem m'sabah 2023 年 9 月 12 日
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 2023 年 9 月 12 日
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

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOperators and Elementary Operations についてさらに検索

製品


リリース

R2016a

Community Treasure Hunt

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

Start Hunting!

Translated by