색인 표현식으로 선택한 벡터·행렬(2차원)·다차원 배열의 원소를 참조하거나 뽑아냅니다.
색인은 스칼라, 벡터, 범위, 행·열·고차원 면 전체를 지정하는 특수 연산자 ‘:’입니다.
색인 표현식은 괄호로 묶은 M 표현식을 반점으로 구분하여 구성합니다. 개별 색인 값와 요소는 색인하는 객체의 각 차원에 사용합니다. 환언하자면, 첫 번째 색인 요소는 객체의 첫 번째 차원(행)에 쓰고, 두 번째 색인 요소는 객체의 두 번째 차원(열)에 쓰는 방식입니다. 색인 요소 M의 개수는 색인 표현식의 차원수를 결정합니다. 색인 요소 두 개는 2차원이기 때문에, 2차원 색인을 합니다.
간단한 예시로, 1)모든 요소가 스칼라인 경우, 2)색인 표현식 M의 차원수가 색인하는 색체의 차원수와 같은 경우를 보겠습니다.
A = reshape (1:8, 2, 2, 2) # Create 3-D array A = ans(:,:,1) = 1 3 2 4 ans(:,:,2) = 5 7 6 8 A(2, 1, 2) # second row, first column of second slice # in third dimension: ans = 6
특정 차원인 객체의 크기가 맞물리는 색인 표현식의 요소와 개수가 같습니다. 모든 요소가 스칼라이면, 결과는 출력 값 하나입니다. 그러나 요소가 하나라도 벡터이거나 범위이면, 각 차원 색인의 곱집합을 반환합니다.
A([1, 2], 1, 2) ≡ [A(1,1,2); A(2,1,2)] ⇒ ans = 5 6
반환값의 전체 개수는 각 색인 요소에서 반환한 원소 개수의 곱입니다. 위 예시에서, 총 개수는 2*1*1 = 2 개입니다.
주어진 차원에서 반환한 객체의 크기와 해당 차원에 대한 색인 표현식의 원소 개수가 같습니다. 위 부호에서, 첫 번째 색인 요소([1, 2]
)가
행 벡터를 특정하나, 이 요소의 모양은 중요하지 않습니다. 중요한 사실은, 요소에 값 두 개가 있고, 이로 인하여 결과가 반드시 첫 번째
차원에서 두 개 크기이어야 한다는 점입니다. 왜냐하면, 첫 번째 차원이 행에 대응하고, 전체 결과는 열 벡터이기 때문입니다.
A(1, [2, 1, 1], 1) # result is a row vector: ans = [3, 1, 1] A(ones (2, 2), 1, 1) # result is a column vector: ans = [1; 1; 1; 1]
첫 번째 줄이 주어진 차원의 출력의 크기가 각 색인 요소의 원소 개수와 같음을 다시 보여줍니다. 위 경우에는, 출력이 두 번째 차원(열에 대응)에서 원소 세 개를 가져, 결과가 행 벡터입니다. 또한, 예시는 색인 표현식에서 어귀 반복을 출력 내 원소 복제에 사용하는 방법을 보여줍니다. 마지막 예시는 색인 요소의 모양은 상관없고, 원소의 개수(2x2 = 4)만이 중요함을 강조하여 증명합니다.
위 규칙은 색인 표현식의 차원수가 1보다 크기만 하면(M > 1) 적용됩니다. 하지만, 1차원 색인 표현식에는 특별한 규칙이 적용되어 출력의 모양이 색인 요소의 모양으로 결정됩니다. 예시:
A([1, 2]) # result is a row vector: ans = [1, 2] A([1; 2]) # result is a column vector: ans = [1; 2]
1차원 색인을 다차원 객체에서 사용하여도 됨(선형 색인이라고도 부름)에 유의하십시오. 이 경우에는 다차원 배열의 원소가 포트란에서처럼 열 우선 순서로 처리됩니다. 배열의 열을 다른 열 위에 쌓아 열 벡터를 이루고, 단일 선형 색인이 이 열 벡터에 적용하는 것입니다.
A(5) # linear indexing into three-dimensional array: ans = 5 A(3:5) # result has shape of index component: ans = [3, 4, 5]
쌍점(‘:’)을 특정 차원의 모든 원소를 모두 선택하는 색인 요소로 사용합니다. 아래 행렬에서
A = [1, 2; 3, 4]
아래 표현식을 사용하면, 모두 동일한 작업을 하여, 행렬의 첫 번째 행을 선택합니다.
A(1, [1, 2]) # row 1, columns 1 and 2 A(1, 1:2) # row 1, columns in range 1-2 A(1, :) # row 1, all columns
쌍점을 특별 경우인 1차원 색인에 사용하면, 색인 결과는 언제나 열 벡터입니다. 쌍점 색인으로 열 벡터 만들기는 매우 자주 보는 부호
표현이며, 1차원 색인에서
reshape
을 호출하는 것보다 빠르고, 보통 더 명료합니다.
A(:) # result is column vector: ans = [1; 2; 3; 4] A(:)' # result is row vector: ans = [1, 2, 3, 4]
색인 표현식에서 예약어 end
는 특정한 차원의 마지막 어귀를 자동으로 참조합니다. 이 마술 색인은 범위에서도
사용하며, 색인 전에 배열 범위를 알기 위한 size
나 length
를 호출할 필요를 없앱니다.
예시:
A(1:end/2) # first half of A => [1, 2] A(end + 1) = 5; # append element A(end) = []; # delete element A(1:2:end) # odd elements of A => [1, 3] A(2:2:end) # even elements of A => [2, 4] A(end:-1:1) # reversal of A => [4, 3, 2, 1]
• 고급 색인: |