IDL/Programming

배열 합치기

이상우_IDL 2012. 5. 4. 18:42
728x90

IDL로 작업을 하다보면 서로 다른 두 배열을 합쳐서 새로운 배열을 만들어야 하는 경우가 종종 있습니다. 사실 이러한 배열 합치기는 비교적 간단하게 할 수 있는데, IDL을 꽤 사용했다 하더라도 잘 모르는 경우도 많은 것 같습니다. 마침 얼마전에 IDL User 게시판에 이러한 질문이 올라와서 제가 답을 올리긴 했는데, 여기서 그 방법을 좀 더 도식적으로 소개하고자 합니다.


먼저 1차원 배열을 서로 합치는 경우를 봅시다. 다음 그림과 같이 배열 A는 5개의 원소를 갖고, 배열 B는 3개의 원소를 갖는데, 이 둘을 합쳐 8개의 원소를 갖는 C라는 배열로 만드는 경우입니다. 편의상 모두 INTARR 함수를 사용하여 모든 원소값이 0인 정수형 배열로 가정하겠습니다.



A = INTARR(5)

B = INTARR(3)


그러면 C는 다음과 같이 꺽쇠괄호인 []를 사용하여 얻을 수 있습니다.


C = [A, B]


어떻습니까? 매우 간단하죠? 사실 이 방법은 많이들 아실 수도 있습니다. 그런데 2차원 배열일 경우는 잘 모르시는 경우가 많은 것 같습니다. 알고보면 별로 복잡하진 않습니다. 그냥 요령에 맞게 []를 사용하면 됩니다. 다음 그림과 같이 5X3의 구조를 갖는 A라는 배열과 3X3의 구조를 갖는 B라는 배열을 가로방향(Row)으로 서로 합쳐봅시다.



A = INTARR(5, 3)

B = INTARR(3, 3)


그러면 C는 역시 다음과 같이 꺾쇠괄호인 []를 사용하여 얻을 수 있습니다. 사실 여기서는 []가 사용된 모습은 위와 같습니다.


C = [A, B]


다만 2차원 배열끼리 합치는 경우 가로(Row) 또는 세로(Column) 방향중 어느 한 방향으로는 갯수가 서로 같아야 합니다. 위의 경우는 A의 세로방향 갯수(3)와 B의 세로방향 갯수(3)가 서로 같은 상황에서, A와 B를 가로방향(Row)으로 붙여버린 경우입니다. 그런데 2차원 배열의 경우는 세로방향(Column)으로 붙이는 경우도 있습니다. 다만 이를 위해서는 A의 가로방향 갯수와 B의 가로방향 갯수가 서로 같아야 합니다. 즉, 다음 그림과 같은 경우입니다.



그러면 이와 같은 병합은 다음과 같이 []를 약간 다른 방식으로 사용하여 이루어집니다. 여기서 []가 사용된 모습을 유의해서 보시기 바랍니다. 위의 경우와 비교한다면 그냥 A, B 각각에 대하여 []를 한번 더 사용했다는 차이밖에 없습니다.


C = [[A], [B]]


어느 프로그램 언어에서나 마찬가지겠지만, IDL에서도 배열을 잘 다루면 프로그래밍이 한결 간편해집니다. 이 방법도 잘 기억해놓으시고 활용하시기 바랍니다.

LIST