IDL/배열 생성 및 처리

배열 생성 관련 간단한 팁

이상우_idl 2018. 1. 19. 17:32
728x90
반응형

오늘은 배열의 생성과 관련하여 간단한 팁을 하나 소개할까 합니다. 대단한 것은 아니지만 알아두면 괜찮을 것 같군요. 작업을 하다보면 다음과 같은 형태의 2차원 배열을 만들고 싶은 경우가 간혹 있습니다.



보시다시피 가로 방향의 패턴이 세로 방향으로 계속 복제되어 있는 듯한 형태라고 볼 수 있습니다. 그러면 이러한 배열을 생성하려면 어떻게 해야 할까요? 우선 가로 방향의 값들로만 구성된 배열을 다음과 같이 arr1이라고 정의해봅시다.


arr1 = [37, 25, 64, 91, 78]


그런데 위의 그림을 보면 우리가 만들고자 하는 배열은 결국 5x4의 형태를 갖는 2차원 배열이 되어야 합니다. 배열을 구성하는 값들의 자료형은 정수라고 간주한다면, 다음과 같이 5x4의 구조를 갖는 정수형 배열을 먼저 생성한 다음, 각각의 가로 방향 성분들에 대하여 위의 arr1을 반복적으로 대입하는 방법이 가능합니다.


arr = INTARR(5, 4)

FOR j = 0, 3 DO arr[*, j] = arr1

HELP, arr

PRINT, arr


이와 같이 생성된 배열 arr의 값들을 출력해보면 우리가 원하던 결과가 얻어진 것을 확인할 수 있습니다.


ARR             LONG      = Array[5, 4]

          37          25          64          91          78

          37          25          64          91          78

          37          25          64          91          78

          37          25          64          91          78


그런데 이러한 방법외에도 또 다른 방법이 있는데, 바로 행렬 연산자인 #를 사용한 방법입니다. 그 내용은 다음과 같습니다.


arr = arr1#MAKE_ARRAY(4, VALUE=1)

HELP, arr

PRINT, arr


이렇게 하여 얻어진 arr 역시 위의 결과와 똑같습니다. 즉 arr은 5x4의 구조를 가지며 가로 방향의 성분값들의 구성 패턴이 세로 방향으로 계속 복제되어 있는 형태가 됩니다. 여기서 사용된 MAKE_ARRAY는 내가 원하는 동일한 값들로 구성된 배열을 생성하는데 사용되는 내장함수입니다.


위의 예제에서는 행렬 연산자 #를 사용하여 비교적 간단하게 문제를 해결하였습니다. 사실 행렬 연산자에는 # 말고도 ##도 있습니다. 만약 위의 예제 코드에서 다음과 같이 #를 ##로 바꾸면 어떤 일이 벌어질까요?


arr = arr1##MAKE_ARRAY(4, VALUE=1)

HELP, arr

PRINT, arr


그 결과는 다음과 같습니다.


ARR             LONG      = Array[4, 5]

          37          37          37          37

          25          25          25          25

          64          64          64          64

          91          91          91          91

          78          78          78          78


보시는 것처럼 arr의 구조는 4x5가 되고, 세로 방향의 성분값들의 구성 패턴이 가로 방향으로 계속 복제되어 있는 형태가 됩니다. 즉 다음과 같은 형태의 배열로 생성됩니다.



따라서 행렬 연산자 #, ##를 잘 활용하면 위와 같은 형태의 배열을 인위적으로 생성하는 것이 가능합니다. 잘 알아두시면 도움이 될 것 같아서 이와 같은 팁을 오늘 소개해보았습니다. 참고로 행렬 연산자 #, ##에 관한 좀 더 자세한 내용이 궁금하시면, 제가 예전에 올렸던 관련 게시물의 내용을 참조하시면 됩니다.

반응형