배열을 수정하는 함수들

IDL을 사용하다보면 배열을 이용하는 경우가 많이 발생합니다. 그런데 파일에서 배열을 읽는다거나 했는데 배열의 순서나 방향등이 마음에 안드는 경우도 생기고, 혹은 배열을 순서대로 정리해야하는 경우도 생기지요. 오늘은 이런 상황에서 유용하게 쓰일만한 함수들을 소개하고자 합니다.

우선 처음으로 보게될 함수는 SORT입니다. 이 함수를 이용하면 배열내의 숫자를 크기별로 정렬할 수 있습니다. 아 실제로 정렬하는 건 아닙니다. 한번 코드부터 보도록 하죠.

SORT는 실제로 주어진 배열을 정렬하지는 않습니다. 대신에 보시면 아시겠지만, SORT함수로 만들어진 b배열을 a배열에 대입을 하니 a배열이 오름차순으로 바뀌어 있는 것을 볼 수 있습니다. 이것은 SORT함수의 결과인 b함수가 값이 아닌 배열내의 주소를 가지고 있다는 것을 보여주는 것입니다. 그렇기 때문에 a배열에 b배열을 대입시켰을 때 오름차순으로 배열이 되게되지요.

다음으로 보실 함수는 REVERSE입니다. 함수의 이름에서도 드러나지만, 이 함수는 뒤집는 함수입니다. 위에 있던 SORT의 배열을 이용해서 보도록 합시다.

SORT된 c배열은 오름차순으로 되있는 것을 보실 수 있습니다. 또한 c배열을 REVERSE한 d배열은 내림차순으로 되있는 것을 볼 수 있습니다. 이 때 REVERSE함수에는 추가적으로 값을 입력하여 다른 변환도 가능합니다. array2=reverse(array1,2) 처럼 사용할 경우 주어진 배열의 두번째 차원의 값을 뒤집어 줍니다.

이러한 계열의 또다른 함수로는 ROTATE가 있습니다.  말그대로 회전을 시켜주는 함수인데요. 이 함수는 정확히 90도 각도의 배수로 변환을 시켜줍니다(자신이 원하는 각도로 변환이 가능한 ROT함수도 있습니다만, 이것은 그래픽의 느낌이 강해서 소개는 안하도록 하겠습니다).

보시는 대로 rotate를 했더니 시계방향으로 90도 돌아가있는 배열의 모습을 보실 수 있습니다. 위의 REVERSE처럼 추가적인 값이 있는데요. 값에 따라서 변환되는 값이 다릅니다. 기본적인 값이 (x,y)라면 0일 때는 그대로 1일 때는 (-y,x), 2일 때는 (-x,-y)의 식으로 존재합니다. 자세한 내용은 실제로 해보셔도 좋고, IDL의 help를 이용하셔도 좋습니다.(0부터 7까지 총 8종류의 rotate방향이 있습니다)

마지막으로 준비한 함수는 TRANSPOSE입니다. 이 함수는 축을 서로 변환하는 함수입니다. 2차원 배열에서 사용한다면, x가 y가 되고 y가 x가 되는 것이지요. 하지만 여기에는 추가적인 기능도 존재합니다. 다음 예제를 보도록 하죠.

예제에서 B는 기본적인 TRANSPOSE가 작동한 모습입니다. 2,3,4 크기의 배열이 4,3,2크기의 배열로 변화되었죠. C에서는 추가적인 값이 들어갔습니다. 3칸을 가진 배열이 들어갔는데요. 여기서 보시면 알겠지만, 그 안에 있는 배열의 순서대로(첫번째를 0번,두번째를 1번 세번째를 2번이라고 한다면)c배열의 크기가 3,4,2가 되어있음을 알 수 있습니다.  이것이 바로 TRANSPOSE를 이용하는 이유가 되겠네요.

오늘은 배열을 수정하는 함수들을 보았습니다. 이런 함수들은 잘 이용하면 배열을 쉽게 컨트롤 할 수 있기 때문에 유용하게 쓰일 수 있을 겁니다. 많은 분들께 유용했기를 바라면서 이번 소개는  마치도록 하겠습니다.