how can obtain min of matrix
古いコメントを表示

1 件のコメント
Matz Johansson Bergström
2015 年 1 月 25 日
編集済み: Matz Johansson Bergström
2015 年 1 月 26 日
Please write the question in text and not as a attached image. The description of your question will not be indexed by the Mathworks search engine if you provide an image.
回答 (5 件)
Matt J
2015 年 1 月 26 日
[row,col]=find(matrix==min(nonzeros(matrix)));
2 件のコメント
sara
2015 年 1 月 26 日
Matz Johansson Bergström
2015 年 1 月 26 日
Ah nonzeros , didn't even know it existed. This is the shortest and best solution and should be accepted as the answer. Good job Matt.
Matz Johansson Bergström
2015 年 1 月 25 日
編集済み: Matz Johansson Bergström
2015 年 1 月 25 日
This solution is maybe a little ugly, but it works Say that A is the matrix.
tmp = A; %we will destroy elements, so we store A in tmp
tmp(tmp==0) = []; %get rid of 0-elements
val = min(min(tmp)); %find value of the smallest element
[u,v] = find(A==val, 1); %find the position
u and v is the (first) row and column of the index of the smallest element in A. The smallest element could occur several times in the matrix.
David Young
2015 年 1 月 25 日
編集済み: David Young
2015 年 1 月 26 日
Another approach:
tmp = A; % avoid destroying A
tmp(tmp == 0) = Inf; % make zero elements bigger than non-zeros
[minVal, minIndex] = min(tmp(:)); % find min value, linear index
[minRow, minCol] = ind2sub(size(A), minIndex); % convert to subscripts
or if you prefer
tmp = A;
tmp(tmp == 0) = Inf; % as above
[colminvals, colminrows] = min(tmp); % find min in each column
[minVal, minCol] = min(colminvals); % find overall min and its column
minRow = colminrows(minCol); % select row of overall min
or my personal preferred method, avoiding copying the matrix and also avoiding a repeat scan with the find operation:
nzpos = A ~= 0;
indexes = 1:numel(A);
indnz = indexes(nzpos);
[minVal, minIndnz] = min(A(nzpos));
[minRow, minCol] = ind2sub(size(A), indnz(minIndnz));
sara
2015 年 1 月 26 日
0 投票
6 件のコメント
David Young
2015 年 1 月 26 日
You're welcome, Sara - but it's not helpful to other users to accept an incorrect answer!
sara
2015 年 1 月 26 日
Matz Johansson Bergström
2015 年 1 月 26 日
Please check John D'Erricos comment to Image Analysts solution above. He even gives the counter-example to why it doesn't work.
Image Analyst
2015 年 1 月 26 日
I deleted my incorrect answer so she can accept someone else's answer (as there is no current way to "Unaccept" an answer other than by deleting it). By the way, in case anyone was wondering it was:
[minValue, index] = min(yourMatrix(yourMatrix ~= 0));
[row, column] = ind2sub(size(yourMatrix), index);
but John D'Errico pointed out that it's wrong because the index you get when you extract the non-zero elements is not the same as the index it would be in the original full array.
Matz Johansson Bergström
2015 年 1 月 26 日
Very good.
2 件のコメント
Image Analyst
2015 年 1 月 26 日
I deleted my answer. Is there not any "Accept this answer" link for any of the others?
sara
2015 年 1 月 26 日
カテゴリ
ヘルプ センター および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!