how can obtain min of matrix

2 ビュー (過去 30 日間)
sara
sara 2015 年 1 月 25 日
編集済み: David Young 2015 年 1 月 26 日
  1 件のコメント
Matz Johansson Bergström
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
Matt J 2015 年 1 月 26 日
[row,col]=find(matrix==min(nonzeros(matrix)));
  2 件のコメント
sara
sara 2015 年 1 月 26 日
thanks Matt
Matz Johansson Bergström
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
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
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
sara 2015 年 1 月 26 日
thanks
  6 件のコメント
Matz Johansson Bergström
Matz Johansson Bergström 2015 年 1 月 26 日
Very good.
sara
sara 2015 年 1 月 26 日
編集済み: sara 2015 年 1 月 26 日
ohhh yes I just tried it for my example. and I was in a hurry and ...thanks dear David and Matz...

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


sara
sara 2015 年 1 月 26 日
編集済み: sara 2015 年 1 月 26 日
Dear ImageAnalyst
I accepted your answer becuase I was in hurry and I check it just for one example...I can not do any changes if you can please edit this...
thanks
  2 件のコメント
Image Analyst
Image Analyst 2015 年 1 月 26 日
I deleted my answer. Is there not any "Accept this answer" link for any of the others?
sara
sara 2015 年 1 月 26 日
thanks

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

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by