본문 바로가기

Software/MATLAB

행렬에서 원하는 데이터의 위치를 알아볼까요??? (MATLAB/Find 명령 사용하기)

MATLAB의 강력한 기능에 한참 매료되어서 재미를 느끼다가 보면, -특히 저처럼 영어에 약한 경우- 원하는 기능은 있는데 어떻게 찾아야할지, 내가 원하는 기능을 가진 명령이 있긴 있는건지 난감할때가 있습니다. 그런 종류의 명령어들 중에서 오늘 이야기할 행렬의 형태로 저장된 데이터에서 원하는 내용이 위치한 위치를 찾고 싶을때가 있습니다. 

물론 저도 처음 MATLAB을 사용할때 그와 같은 기능이 필요했고, 뭐 어디서 찾아봐야할지 몰라서 -언젠가 한번 이야기했었지만, 저는 MATLAB을 책으로 공부한 적이 없습니다. 그냥.. MATLAB의 너무나나도 강력한 'lookfor'명령과 'help'명령으로만 공부를 했었거든요. 요즘 버젼처럼 document가 아름다웠던 시절이 아니라서요...ㅠㅠ - 하여간 그래서 보통 필요한 기능 중 찾지 못한 명령어는 만들어서 사용했는데요.

그런데 뭐 만들어쓰는것도 나쁘진 않지만, 이 명령은 너무 쉬운데 MATLAB을 처음 공부하는 분들은 잘 모르는 명령이 있습니다. 바로 'find'명령입니다.

연습하기 위해

magic이라는 명령으로 임의의 행렬을 하나 만들어 보죠. magic은 가로 세로 대각선으로 합이 모두 같게 만들어주는 '마방진'을 만들어주는 명령입니다. 뭐 연습용이 필요했을 뿐이니 마방진이 뭔지는 그냥 넘어가죠...^^

위에 바로 find명령의 사용법이 보이실 겁니다. 83의 위치를 요구했고, 결과는 6번행에 4번줄이라네요...

당연히 범위를 입력할 수도 있습니다. 뭐 조건식으로 표현만 되면 다 되겠죠. 아참 뒤에 세미콜론(;)찍고 다시 [i, j]라고 표기한건 command window에서 캡쳐할려다 보니 한 화면에 안나와서 그런겁니다. (전 노트북이라...ㅠㅠ)

그런데 최대값이나 최소값의 위치를 찾을때는 좀 문제가 있습니다. 최대값을 찾아주는 max라는 함수를 사용해보면, '100'이라는 실제 최대값을 찾지 않고 뭔가 많이 내어놓거든요.. 그게 최소값을 찾는 min이나 최대값을 찾는 max는 벡터에서 사용하는 명령어라 2차 행렬의 경우 각 열마다 최대 혹은 최소를 찾아줍니다. 그러니 실제 최대 혹은 최소값을 찾기 위해서는 min이나 max를 연달아 두번 사용하면 뭐 됩니다. (혹시 한번에 찾는 명령어가 또 있을까요?? 헉.. matlab은 명령어나 너무 많아서 혹시 있을 지도 모르겠습니다...)

그래서 위와 같이 입력합니다. max를 연달아 두번 사용해서 '100'을 찾은 다음 그걸 find한거죠^^ 10번 행의 3번 열에 있다는 군요...^^

반응형