여기에서는 이전 포스트에 이어서 행렬의 인덱싱에 대해서 설명하겠다. 행렬의 인덱스에 콜론(:) 연산자를 이용하여 여러 개의 행이나 열을 동시에 선택할 수도 있다.
>> A(2, 1:3) % 2행의 1열에서 3열까지의 원소4 5 6 |
위의 예에서 콜론 연산자가 단독으로 쓰이는 경우와는 다르다는 것을 알 수 있다. 여기에서 콜론 연산자는 이전 포스트에서 설명한 수열을 생성하는 연산자로서 행벡터를 생성한다. 즉 위의 명령은 다음과 완전히 동일하다.
>> A(2, [1 2 3]) |
다음 명령을 보자.
>> A(1:3, :) % 1행(전체)부터 3행(전체)까지>> A([1 2 3], :) |
이 명령어의 행인덱스 1:3 와 열인덱스 : 에 똑같은 콜론(:)문자가 쓰였지만 전혀 다른 연산자이다. 앞에 콜론은 수열을 생성하는 연산자이고 뒤의 연산자는 인덱스로서 단독으로 쓰였기 때문에 ‘모두’의 의미를 갖는다. 즉, 둘 다 같은 명령이다.
행렬의 마지막 요소를 지정하는 데에는 end연산자가 사용된다. 다음 예를 보자.
>> f=1:2:10 f =1 3 5 7 9>> f(end)9 |
위에서는 f벡터의 끝 요소 만을 참조하려면 f(5)라고 하면 되지 않겠느냐고 생각할 수도 있으나 end연산자는 참조하려는 행렬의 크기를 모르는 경우 제일 끝의 행(또는 열)만을 지정하고 싶을 때 유용하다. MATLAB 프로그래밍을 하다 보면 참조하려는 행렬의 크기가 불확실한 경우가 자주 발생하게 된다. 다음의 예제도 잘 살펴보기 바란다.
>> F=magic(5)F =17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9>> F(end)9>> F(2:end, :)23 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9>> F(1:3, 3:end)1 8 157 14 1613 20 22 |
위에서 magic(n)함수는 (n은 홀수) nxn 차원의 정방 행렬을 만드는데 생성된 행렬은 특정한 행(또는 열)의 모든 요소의 합이 일정하다. 대각선 방향의 합도 역시 같다. (자세한 설명은 help magic 명령으로 살펴볼 수 있다.)
만일 어떤 행렬에서 특정한 행 또는 열을 없애려면 다음과 같이 하면 된다.
>> A=magic(3)A =8 1 63 5 74 9 2>> A(2,:)=[]A =8 1 64 9 2>> A(:,3)=[]A =8 14 9 |
위에서 [ ] 명령은 공행렬(empty matrix)을 생성하는데 이는 크기가 0인 행렬을 뜻한다. 예를 들어 행렬 A에서 2행을 없앤 행렬을 B에 대입하려면 다음과 같이 하면 될 것이다.
>> A=pascal(3) A =1 1 11 2 31 3 6>> B=A([1 3],:) B =1 1 11 3 6 |
공행렬과 영행렬(zero matrix)은 구별해야 하는데 공행렬은 크기가 0인 행렬을 의미하며 MATLAB에서는 ‘[]’로 생성한다. 영행렬은 행렬의 모든 요소가 0인 행렬을 의미하며 zeros()함수를 이용하면 생성할 수 있다.
find(X)함수는 입력행렬 X의 요소 중 0이 아닌 것의 인덱스를 반환한다. 즉, 행렬의 0이 아닌 요소의 인덱스를 찾는 함수가 find()함수이다. (help find명령으로 확인해 보라.) 이 함수의 반환값은 하나, 둘 그리고 세 개가 될 수 있다.
>> X=[0 1 3; 3 0 4; 0 5 0]X =0 1 33 0 40 5 0>> m=find(X)m =24678 |
위의 결과를 이해하려면 MATLAB에서 이차원 행렬의 요소들은 내부적으로 일차원 배열로 저장됨을 이해해야 한다. 그 일차원 배열의 0이 아닌 요소의 인덱스를 find()함수가 만약 출력변수가 한 개라면 반환하는 것이다. 위의 경우 행렬 X의 내부 인덱스를 도시하면 다음 그림과 같다.
[그림 2] X행렬의 내부 요소 인덱스
이 그림을 보면 앞의 예제에서 find()함수의 결과값이 이해가 갈 것이다.
'프로그래밍언어.Lib > MATLAB' 카테고리의 다른 글
MATLAB 행렬의 크기 구하기 (3) | 2015.06.25 |
---|---|
MATLAB 의 행렬의 인덱싱 방법 (part 3) (0) | 2015.06.24 |
MATLAB 의 행렬의 인덱싱 방법 (part 1) (0) | 2015.06.24 |
MATLAB 의 행렬 기본 입력 (part 4) : 벡터와 콜론(:) 연산자 (0) | 2015.06.24 |
MATLAB 행렬 기본 입력 (part 3) : 복소 행렬 (0) | 2015.06.24 |