IDL/배열 생성 및 처리

배열 합치기(Array Concatenation) [1]

이상우_idl 2023. 4. 11. 13:24
728x90
반응형

오늘은 배열 합치기(Array Concatenation)에 관하여 살펴보고자 합니다. 이것은 어떤 배열이 있을 때 또 다른 배열을 합쳐서 더 큰 배열을 만드는 작업을 의미합니다. 이게 영문으로는 Concatenation이라고 하는데, 단어상으로는 '연결'이라는 의미이기도 합니다만, 여기서는 '합치기'라는 용어로 불러보겠습니다. 사실 배열과 배열을 합친다는 개념 자체는 그리 어려운 것은 아닙니다. 다만 그런 작업을 할 경우에 어떤 문법을 따라야 하느냐가 관건입니다. 특히나 차원이 높은 배열일 경우에는 그 문법이 복잡한 측면이 있습니다. 그러면 배열의 차원별로 알아보겠습니다.

 

 

< 1차원 배열 >

 

1차원 배열의 경우는 그 과정이 비교적 단순한 편입니다. 먼저 다음과 같이 5개의 원소값들로 구성된 a라는 배열이 있다고 가정합니다.

 

a = [14, 27, 6, 11, 19]

 

그리고 다음과 같이 3개의 원소값들로 구성된 b라는 배열이 또 있다고 합시다.

 

b = [8, 20, 13]

 

이제 배열 a와 b를 합쳐서 c라는 배열로 만들어봅시다. 일단 이 과정을 도식적으로 본다면 다음 그림과 같습니다.

 

 

실제로 이 작업은 다음과 같이 처리하면 됩니다.

 

c = [a, b]
HELP, c
PRINT, c

 

출력된 결과를 보면 c는 8개의 원소값들로 구성된 배열로 합쳐졌음을 알 수 있습니다.

 

C               INT       = Array[8]
      14      27       6      11      19       8      20      13

 

그런데 만약 새로 추가될 배열이 위와 같이 b라고 미리 정의된 것이 아니고 그냥 내가 직접 원소값들을 표기해야 할 경우도 있습니다. 예를 들어 위의 과정은 다음과 같이 처리해도 됩니다.

 

c = [a, [8, 20, 13]]

 

여기서는 추가될 배열을 [8, 20, 13]이라고 직접 적어준 것입니다. 그런데 사실 다음과 같이 적어도 결과는 마찬가지입니다.

 

c = [a, 8, 20, 13]

 

따라서 추가될 배열에 대하여 꺽쇠괄호 표기를 하는 것이 의무적이지는 않습니다. 이 부분은 작업자의 편의에 따라 선택적으로 처리하면 될 것 같습니다.

 

 

< 2차원 배열 >

 

1차원 배열과는 달리 2차원 배열부터는 문법이 약~~간 복잡해집니다. 일단 다음과 같이 4x3의 구조를 갖는 a라는 배열이 있다고 가정합니다.

 

a = [[34, 55, 19, 28], [26, 40, 7, 31], [17, 24, 10, 61]]
HELP, a
PRINT, a

 

이 배열은 다음과 같은 모습입니다.

 

      34      55      19      28
      26      40       7      31
      17      24      10      61

 

그런데 여기에 추가될 b라는 배열이 어떤 형태가 될 것인가를 고려할 필요가 있습니다. 일단 다음과 같이 4x2의 구조를 갖는 b라는 배열이 있다고 합시다.

 

b = [[41, 12, 20, 9], [6, 15, 37, 28]]
HELP, b
PRINT, b

 

이 배열은 다음과 같은 모습입니다.

 

      41      12      20       9
       6      15      37      28

 

그러면 a와 b를 합쳐봅시다. 다만 여기서 고려해야 할 것은 4x3 배열과 4x2 배열을 합친다는 것은 결국 두번째 차원끼리 합쳐져서 4x5의 배열이 되도록 해야 한다는 것입니다. 즉 행(Column) 방향으로 크기가 더 커지는 효과가 됩니다. 일단 이 과정을 도식적으로 보면 다음 그림과 같습니다.

 

 

실제로 이러한 처리는 다음과 같이 하면 됩니다.

 

c = [[a], [b]]
HELP, c
PRINT, c

 

여기서는 합쳐질 대상 배열들 모두에 대하여 꺽쇠괄호를 덧씌워야 한다는 것에 유의해야 합니다. 출력된 결과를 보면 다음과 같습니다.

 

C               INT       = Array[4, 5]
      34      55      19      28
      26      40       7      31
      17      24      10      61
      41      12      20       9
       6      15      37      28

 

이와 같이 행 방향으로 더 커진 배열을 얻었음을 알 수 있습니다. 그렇다면 행 대신 열(Row) 방향으로 합치는 경우도 당연히 있을 것입니다. 그러면 a는 그대로 사용하고 여기에 열 방향으로 추가될 b라는 배열이 있어야 하므로, 이번에는 b를 다음과 같이 2x3의 구조를 갖는 배열로 정의해봅시다.

 

b = [[18, 29], [42, 34], [11, 27]]
HELP, b
PRINT, b

 

이 배열은 다음과 같은 모습입니다.

 

      18      29
      42      34
      11      27

 

그러면 4x3 배열과 2x3 배열을 열 방향으로 합쳐서 6x3 배열로 만들어봅시다. 일단 이 과정을 도식적으로 보면 다음 그림과 같습니다.

 

 

실제 처리 과정은 다음과 같습니다.

 

c = [a, b]
HELP, c
PRINT, c

 

이와 같이 열 방향으로 크기가 더 커지는 효과를 얻으려면 합쳐질 대상 배열들 모두에 대하여 꺽쇠괄호를 추가하지 않고 그냥 적어주면 된다는 것만 유의하면 됩니다. 출력된 결과를 보면 다음과 같습니다.

 

C               INT       = Array[6, 3]
      34      55      19      28      18      29
      26      40       7      31      42      34
      17      24      10      61      11      27

 

그리고 2차원 배열에 대하여 행 또는 열 방향으로 하나의 라인(Line)씩만 추가하고 싶은 경우가 있습니다. 먼저 행 방향의 라인 추가 예제를 도식적으로 보면 다음과 같습니다.

 

 

그러면 이 그림을 참조하여 일단 배열 a는 그대로 사용을 하고 b가 다음과 같이 그냥 1차원 배열로 정의되어있다고 합시다.

 

b = [25, 14, 40, 18]

 

이 때 배열 a에 배열 b를 행 방향으로 합쳐서 4x4의 구조를 갖는 c라는 배열을 얻기 위한 과정은 다음과 같습니다.

 

c = [[a], [b]]
HELP, c
PRINT, c

 

출력된 내용은 다음과 같습니다. 의도했던 결과를 얻었음을 확인할 수 있습니다.

 

      34      55      19      28
      26      40       7      31
      17      24      10      61
      25      14      40      18

 

이번에는 열 방향으로 라인 하나를 추가하는 예제를 봅시다. 먼저 이러한 예제를 도식적으로 보면 다음 그림과 같습니다.

 

 

이 그림을 참조하여 배열 a는 그대로 사용하고 b가 다음과 같이 그냥 1차원 배열로 정의되어있다고 합시다.

 

b = [32, 19, 7]

 

이 때 배열 a에 배열 b를 열 방향으로 합쳐서 5x3의 구조를 갖는 c라는 배열을 얻기 위한 과정은 다음과 같습니다.

 

c = [a, TRANSPOSE(b)]
HELP, c
PRINT, c

 

여기서는 합치는 과정에서 b에 대하여 TRANSPOSE 함수가 사용된 것에 유의해야 합니다. 이것은 원래 가로 방향의 1차원 배열이었던 b를 일시적으로 세로 방향의 1차원 배열로 변환하기 위한 것입니다. 그래야 열 방향으로 원활하게 합쳐지게 됩니다. 출력된 내용을 보면 다음과 같습니다. 의도했던 결과를 얻었음을 확인할 수 있습니다.

 

      34      55      19      28      32
      26      40       7      31      19
      17      24      10      61       7

 

이와 같이 2차원 배열의 경우에는 추가될 차원이 행(Column) 또는 열(Row) 방향이냐에 따라서 문법이 서로 다르다는 점을 유의해야 합니다. 그렇다면 3차원 배열의 경우는 어떻게 해야 할까요? 모르긴 해도 아마 더 복잡한 문법이 등장할 것 같다는 느낌이 듭니다. 그러면 3차원 배열에 대한 내용은 다음 회차에서 이어가도록 하겠습니다.

반응형