생성된 행렬의 개별 요소를 접근하려면 행렬에 괄호 안에 행과 열의 번호를 콤마(,)로 구분하여 써주면 되는데 예를 들어 A행렬의 r행 c열 요소는 다음과 같이 접근한다.
A(r, c) |
여기서 r과 c를 인덱스(index)라고 한다. 사용 예를 들면 다음과 같다.
>> A = [ 1 2 3; 4 5 6]>> b = A(1, 2) // 2가 변수 b에 저장된다.>> A(2,3) = 3*%i // 2행 3열의 요소가 6에서 3i 로 변경된다. |
만약 B가 벡터라면 다음과 같이 두 가지 방법으로 인덱싱을 할 수 있다.
>> B = [2 3 5 7 11 13 17 19]>> c = B(1, 5) // 1행 5열 요소이므로 11이 변수 c에 저장된다.>> d = B(5) // 위와 같다.>> E = (1:100)’>> f = E(5,1) // 5행 1열의 요소이므로 5가 변수 f에 저장된다.>> g = E(5) // 위와 같다. |
이 예제와 같이 벡터의 인덱싱은 하나만 지정할 수 있다.
사실 행렬은 내부적으로 1차원 배열로 관리되며 따라서 인덱스를 하나만 지정할 수는 있다. 예를 들어 다음과 같이 H행렬이 있다고 가정할 때
>> H = [ 10, 20, 30; -40, -50, -60,] |
H(1)은 H(1,1)과 같이 10이고 H(2)는 H(2,1)의 요소인 -40이다. H(3)은 H(2,1)과 같다.
H(1) == H(1,1)
|
H(3) == H(1,2)
|
H(5) == H(1,3)
|
H(2) == H(2,1)
|
H(4) == H(2,2)
|
H(6) == H(2,3)
|
[ 그림 1] H행렬의 인덱싱
하지만 행렬의 경우 이런 방식으로 인덱싱하는 것을 추천하지 않으며 사용 빈도도 낮다.
하나의 행 또는 하나의 열 전체를 선택하고자 할 때는 콜론(:)을 인덱스로 사용한다. 예를 들어서 H행렬의 1행 전체와 2열 전체를 선택해서 J1과 J2에 대입하고자 하면 다음과 같이 한다.
>> J1=H(1,:) // 1행, 전체 (즉 그냥 1행)J1 =10. 20. 30.>> J2=H(:,2) // 전체. 2열 (즉 그냥 2열)J2 =20.- 50. |
이와 같이 콜론(:)이 인덱싱에서 단독으로 쓰이면 전체(all)의 의미를 갖는다. 혼동의 여지가 있는 것은 이전 포스트에서 설명한 콜론(:)연산자의 경우이다. 예를 들어서 2x100 행렬 K를 다음과 같이 생성했다고 가정해 보자.
>> K = [1:100; 100:-1:1] |
이 행렬의 1열부터 10열까지 동시에 선택해서 변수 L에대입하려면 다음과 같이 하면 된다.
>> L = K(:, 1:10) |
두 번째 열인덱스에 1:10 이라고 콜론 연산자를 사용했다. 따라서 이 명령은 다음과 완전히 동일하다.
>> L = K(:, [1 2 3 4 5 6 7 8 0 10]) |
이렇게 하는 것 보다는 전자가 훨씬 간단하므로 전자를 사용할 것이다. 하지만 콜론 연산자를 사용하는 것은 연속되거나 등간격의 행이나 열을 선택하는 경우에만 사용할 수 있다. 예를 들어서 2열, 4열, 6열… 20열을 동시에 취하려면 다음과 같이 하면 된다..
>> M = K(:, 2:2:20) |
하지만 등간격이 아닌 경우에는 행벡터로 각각을 직접 지정해 주어야 한다. 예를 들어서 1열, 2열, 3열 5열 7열 11열 을 동시에 취하려면 다음과 같이 하면 된다.
>> M = K(:, [1 2 3 4 5 11]) |
등간격이 아니므로 이렇게 직접 지정해 주어야 한다.
만약 어떤 행렬의 가장 마지막 행(또는 열)을 선택하고 싶다면 $지정자를 이용하면 된다.(MATLAB의 경우에는 end 지정자가 있다.) 예를 들어 K행렬의 가장 마지막 열을 N변수에 대입하고 싶다면다음과 같이 하면 된다.
>>N=K(:,$)N =100.1. |
다른 예로 P라는 100x100는 행렬이 있다고 하고 이 행렬의 마지막 행의 1열부터 50열까지를 선택하고 싶다면
>> P($, 1:50) |
라고 지정하면 된다. 마지막행 전체를 선택하려면 P($ , :)라고 하면 될 것이다.
한 가지 특이한 점은 이 $ 지정자는 특정한 값을 가지지 않는데도 불구하고 마치 특수 상수처럼 사용된다는 점이다. 이 말은 이 지정자가 자유롭게 변수에 저장될 수 있다는 말이며 다음과 같은 명령이 가능하다.
>> x = $>> y = [ 3 5 7 $]>> z = 5:$>> Q = P(:, z) |
이 예의 마지막 명령은 P행렬의 5열부터 마지막 열까지를 취해서 Q변수에 대입하는 것이다.
댓글 없음:
댓글 쓰기