IT/MATLAB

[MATLAB] 행렬 인덱싱과 슬라이싱

천사환 2024. 5. 4. 21:36
반응형

MATLAB 관련 글을 전에 하나 올렸었는데 찾으보시는 분이 꽤 계시는 것 같아서 다시 정리해보려고 합니다. 어쩌다 보니 올해도 과제로 매틀랩을 쓸 일이 몇 번 생기고 있는데 복습할 겸 천천히 정리해보겠습니다.

 

저번 글에 이어서 행렬을 다루는 것에 대해서 조금 더 기술을 하려고 합니다.


Array Indexing & Slicing

 

인덱싱

행렬 내의 각 요소들이 어떻게 인덱싱되는지를 먼저 보고 그에 따른 slicing 방법을 살펴보겠습니다.

 

먼저 1부터 9까지의 수로 구성된 3 by 3 행렬을 만들어 놓겠습니다. 

 

indexing은 (행, 열)로 생각하시면 되는데 매틀랩의 경우 indexing이 0부터가 아니라 1부터 시작된다는 점이 조금 다릅니다. 파이썬이 0부터 시작되기 때문에 이 차이를 알아두시는 게 중요합니다. 그래서 A(3,2)라고 하면 위에서 세번째 행의 두번째 값을 고른 것이 됩니다.

 

8이 나온 것을 알 수 있습니다. 그래서 인덱싱은 A(행, 열)로 생각하면 됩니다. 1부터 시작하기 때문에 직관적으로 어렵지는 않을 것 같습니다.

 

Single Subscript

여기서 매틀랩의 특징하나는 꼭 (행, 열)이 아니라 single subscript로도 element를 불러낼 수 있습니다. 그러니까 행과 열이라는 두 개의 값을 사용하는 게 아니라 몇번째 값인지 하나만 적어주어도 된다는 것입니다. 

 

 

A(6)이 A(3,2)와 동일하 값을 내보이는 것을 알 수 있습니다. single subscipt 방법에서 몇번째 숫자인지는 열방향을 따라서 생각하시면 됩니다. 예컨대 A(2)라고 하면 A(1) = 1에서 행 방향으로 가는 것이 아니라 열 방향으로 가서 A(2) = 4가 되는 것입니다.

 

256*256 과 같이 전체 구성 수가 너무 많아지면 single subscirpt를 쓰는 것이 쓸모가 없을 수도 있지만 3*3와 같이 작은 편의 행렬은 single subscipt 방식이 더 편할 수도 있습니다. 

 

Slicing 

인덱싱을 알았으니 단일 원소만이 아니라 뭉텅이로 slicing도 할 수 있습니다.

slicing은 보통 colon( : )을 사용해서 수행하게 됩니다. 위의 예시와 같이 A(1:2, 2)라고 하게 되면 행은 1행에서 2행까지 열은 2번째 열이기 때문에 2와 5가 출력되었습니다. 열 쪽에서만 긁거나 양 쪽에서 긁을 때에도 마찬가지로 하면 됩니다.

 

인덱싱만 익숙하다면 slicing도 그렇게 어려운 일은 아닙니다.

 

다만, '1:3'으로 긁으면 사실상 긁어오는 것보다 통째로 가져오는 건데 굳이 몇번째에서 몇번째인지 써줄 필요가 있는 것일까 생각이 들 수 있습니다. 이제 그럴 때에는 사실 그냥 콜론( : )만 써줘도 됩니다.

 

같은 결과과 출력되고 있습니다. colon( : )이 긁어오는 역할도 수행하지만 단독으로 쓰일 경우에는 'all'이라는 의미로 다 가져오는 일을 하게 된다고 알아두면 될 것 같습니다. 

 

 

반응형

'IT > MATLAB' 카테고리의 다른 글

[MATLAB] 프로그램 창 구성과 행렬 표현 기본  (0) 2023.11.02