IDL/Programming

배열 인덱싱에 관한 간단한 팁

이상우_IDL 2013. 6. 3. 18:06
728x90

배열의 인덱싱에 관하여 어쩌면 다들 아실만한 내용일 수도 있는데, 괜시리 호들갑떠는 것 같기도 합니다. 어쨌든 뭐 말씀을 드려보면, 일단 다음과 같은 배열이 있다고 가정해봅시다.


IDL> data = [30, 85, 70, 95, 60]


이 배열에서 특정 위치부터 끝까지에 해당되는 부분 원소들을 추출해서 출력하기 위해서는 어떻게 해야 할까요? 예를 들어 세번째부터 마지막(다섯번째) 원소까지를 출력하려면 다음과 같이 범위 인덱싱을 할 수 있습니다.


IDL> PRINT, data[2:4]

70    95    60


그런데 마지막 원소의 위치에 대한 인덱스를 명시적으로 표시하지 않고도 어디서부터 마지막까지라는 방식의 인덱싱을 하는 방법도 있습니다. 첫번째 방법은 N_ELEMENTS 함수를 사용하여 배열내 원소들의 갯수를 구하여 사용하는 방법입니다. 다음과 같은 방식이 될겁니다.


IDL> PRINT, data[2:N_ELEMENTS(data)-1]

70    95    60


그런데 이렇게 N_ELEMENTS 함수를 사용하지 않는 방법도 있습니다. 이게 두번째 방법인데요. 다음과 같습니다.


IDL> PRINT, data[2:*]

70    95    60


여기서 이와 같이 와일드카드(*)가 사용될 수 있습니다. 저도 사실 첫번째 방법을 많이 써온게 사실입니다. 그런데 두번째 방법이 가능하다는 것을 저도 비교적 최근에 깨달았습니다. 이게 어쩌다 알게 된 것이냐 하면, 포트란에서 이와 유사한 인덱싱 방법이 있거든요. 다음과 같은 방식입니다.


PRINT*, data(3:)


물론 포트란에서는 인덱스의 시작이 1이라는 점, 그리고 배열 인덱싱에 있어서 일반괄호만 사용된다는 점 등의 차이가 있습니다. 하여간 이와 같이 콜론뒤를 비워놓으면 끝까지라는 의미로 알아서 해석이 됩니다. 하여간 프로그래밍 언어를 사용하다보면 다들 알만한 뻔하다싶은 방법같은데 미처 몰랐던 것이 종종 발견되는 경험들을 하실겁니다. 이 내용도 이미 다 아시는 분들은 그냥 "쯪쯪~"하고 넘기시면 되고, 혹시 모르셨던 분들이라면 같이 공유하면 좋겠습니다.

LIST