2014-11-30 4 views
3

전체 행렬의 최소값을 찾아야하고 '좌표'입니다. 매트릭스 Matlab : 최소 행렬

matrix = 8 7 6 5 
     4 3 2 1 

같은 최소에서 1 일 것이다 (2,4).

답변

3

두 출력 버전을 사용하는 find을 사용하면이 작업을 매우 간단하게 수행 할 수 있습니다. 따라서 행렬에서 매트릭스의 최소값과 일치하는 행 및 열 위치를 검색하면됩니다. 따라서

:

[row, col] = find(matrix == min(matrix(:))); 

rowcol이 최소값 동등한 matrix의 행 및 열 위치를 포함 할 것이다. matrix(:)을 수행하여 행렬을 벡터로 전개해야한다는 것에 유의하십시오. 이유는 행렬에 min을 사용하면 기본적으로 각 열을 따라 최소값을 부여하기 때문입니다. 전체 행렬에 대한 최소값을 찾고 싶기 때문에이 값을 단일 벡터로 변환 한 다음 전체 벡터에서 최소값을 찾습니다. 이 최소 일치 모든 행과 열 위치를 반환합니다, 그래서 실제로 N이 최소 동일 matrix 요소의 총량이 rowcolN x 1 등의 열 벡터를 줄 것이라고

를 적어 둡니다.

당신은 일치를 원하는 경우, 단순히 find에 두 번째 매개 변수로 1을 추가 :

[row, col] = find(matrix == min(matrix(:)), 1); 
+0

나는 복잡해졌습니다. 감사합니다! – Ain

+0

@Ain - 내 기쁨 :) 행운을 빌어 요! – rayryeng

+0

@Ain - 약간의 오타를 만들었습니다. 기본적으로 코드의 각 줄마다 대괄호가 빠졌지 만 지금 생각해 보면 확실합니다! – rayryeng

0

차원의 수의 텐서을 위해 작동 할 또 다른 옵션을, min을 사용하는 것입니다 선형 인덱싱을 사용하는 경우 ind2sub을 사용하여 필요한 경우 정확한 인덱스를 복구하십시오.

[~, nIndex] = min(matrix(:)); 
[nIndex1, nIndex2, nIndex3, ...] = ind2sub(size(matrix), nIndex); 
+0

방금이 코드를 시도했습니다. 'ind2subs'는 MATLAB 배포판에 존재하지 않습니다. 또한이 함수에 대한 MATLAB 문서를 검색했지만 존재하지 않습니다. 내 투표를 거는 중. 죄송합니다! – rayryeng

+0

죄송합니다.'ind2sub'가 있어야합니다. –