IDL에서 불규칙한 격자점들의 형태로 분포하는 2차원 데이터를 규칙격자화된 2차원 데이터로 만들어주는 역할을 하는 KRIG2D라는 함수가 있습니다. 내부적으로 Kriging method라는 기법을 사용하는 내장함수입니다(기법 자체에 대한 설명은 생략합니다). 그런데 대상자료가 되는 불규칙 격자 데이터의 갯수가 많을수록 아무래도 처리시간이 많이 걸리는 문제가 그 동안 있었습니다. 예를 들면, 500개의 불규칙한 분포를 하는 포인트들로 이루어진 자료를 이 KRIG2D 함수를 사용하여 규칙격자화하는데 있어서 컴퓨터 사양에 따라서는 수십초까지도 걸립니다. 그런데 최근에 이 함수의 내부 알고리즘 개선을 통하여 대폭적인 속도 향상이 있었습니다. 원래는 David Fanning의 웹사이트에서도 처음 제기되었던 문제였는데, 이후에 ExelisVis에서도 문제를 인지하고 알고리즘의 손질을 수행하였다고 합니다.
그래서 이와 같은 방향으로 새롭게 개선된 KRIG2D 함수의 소스코드가 배포되고 있습니다. 저도 받아서 테스트해본 결과, 수십배 정도의 속도 향상이 있음을 확인하였습니다. 물론 IDL의 다음 버전에서 당연히 들어가겠지만, 개선된 소스코드 자체는 지금이라도 받아서 사용할 수 있습니다. 이 파일을 이 게시물의 첨부파일로 올려놓겠습니다. 배포되고 있는 코드는 기존의 KRIG2D라는 이름을 그대로 쓰고 있는데요. 제가 나름대로 이름을 KRIG2D_NEW라는 이름으로 바꿔서 올려놓았습니다. 기존 것과의 비교를 좀 해보기 위해서입니다. 기존 것을 아예 대체하실 분들은 그냥 KRIG2D라고 이름을 고쳐서 사용하셔도 됩니다.
그리고 기존의 알고리즘과의 비교를 위해서 간단한 테스트 코드(TEST_KRIG2D_NEW.PRO)도 만들어보았습니다. 이 코드도 첨부파일로 함께 올려놓겠습니다. 이 테스트 코드에서는 다음 그림과 같이 500개의 불규칙한 분포를 하는 포인트들로 이루어진 2차원 자료를 대상자료로 사용합니다.
일단 위의 그림은 PLOT3D 함수로 그린 것인데, 옆에서 비스듬히 본 모습에 해당됩니다. 그냥 위에서 수직으로 내려다본 모습은 다음 그림과 같습니다. X, Y가 0~1의 범위를 갖는 공간내에서 불규칙한 분포를 하고 있음을 알 수 있습니다.
이 자료에 대하여 새로운 KRIG2D 함수 및 기존의 KRIG2D 함수를 사용하는 방법 및 결과는 서로 동일합니다. 결과 자체는 다음 그림과 같이 얻어집니다. 여기서는 X, Y 방향 모두 0~1의 범위를 갖는 200X200의 규칙격자화된 2차원 자료를 얻었습니다.
그런데 처리 시간에 있어서는 엄청난 차이가 납니다. 제 컴퓨터에서는 기존의 루틴으로는 16~17초 정도가 걸린 반면, 새로운 루틴으로는 0.7~1.0초 정도가 걸리더군요. 약 20~30배 정도의 속도 차이라고 볼 수 있습니다. 여러분들의 컴퓨터에서는 어느 정도의 차이가 날지 궁금합니다. 어쨌든 이 알고리즘을 사용하여 규칙격자 데이터를 만드는 작업을 하는데 있어서 새로운 KRIG2D를 사용하면 굉장한 효율 향상을 가져올 것 같습니다.
참고로 이 내용은 David Fanning의 웹사이트에 있는 내용(링크 누르기)을 참조로 작성된 것임을 밝혀둡니다.
-------------------------------------------------------
IDL 8.3 버전에서 공식적으로 KRIG2D 함수의 성능을 향상시키는 업데이트가 단행되었습니다. 따라서 8.3 또는 그 이후의 IDL을 사용하는 경우라면 굳이 KRIG2D_NEW를 사용할 필요는 없습니다. 내장된 KRIG2D를 이용하는 것만으로 충분합니다. 다만 그 이전 버전의 IDL에서 빠른 속도의 KRIG2D 기능이 필요한 경우라면 KRIG2D_NEW의 가치는 여전히 유효합니다. 따라서 IDL 8.3을 기준으로 KRIG2D_NEW의 필요성이 달라진다는 점 참조하시기 바랍니다.
'IDL > Math' 카테고리의 다른 글
로그(Log) 함수의 사용에 관한 팁 (0) | 2013.11.12 |
---|---|
IDL에서 적분을 해봅시다 (Part 2) (0) | 2013.11.04 |
행렬곱 #와 ##의 차이를 아십니까? (0) | 2013.09.26 |
IDL에서 적분을 해봅시다 (Part 1) (0) | 2013.09.23 |
IDL로 연립방정식을 풀어봅시다 (0) | 2013.09.17 |