IDL 프로그래밍 관련 자잘한 지식 및 팁 소개 [4]

153 views
Skip to first unread message

이상우

unread,
Apr 13, 2020, 4:22:50 AM4/13/20
to 대한민국 IDL/ENVI/SARScape 사용자 포럼

1. 변수 또는 배열의 제거 방법

 

IDL에서 생성된 변수 또는 배열을 제거하려면 어떻게 해야 할까요여기서 제거 의미는 메모리상에서 없앤다는 의미입니다  변수나 배열이 점유하고 있던 메모리를 해제해주는 입니다만약 다수의 변수 또는 배열들을 사용하는 프로그램에서는어느 단계 이후에  이상 필요없는 항목들을 제거해주는것이 효율적일 수도 있습니다이러한 효율성을 위하여 변수나 배열을 인위적으로 제거해주는 것이 필요할 것입니다. IDL 프로그램 내에서 변수나 배열을 제거하기 위해서는 !null 또는 TEMPORARY 함수를 적절히 활용해주면 됩니다예를 들어 다음과 같이 배열 a 정의한 다음 HELP 확인해보면 당연히 해당 정보가 출력될 것입니다.

 

a = FINDGEN(100)

HELP, a

 

A               INT       =       10

 

그런데 다음과 같이 !null 값을 이용하면배열 a 값을 !null 대체함으로써 사실상 a 메모리상에서 제거하는 효과 얻을  있습니다.

 

a = FINDGEN(100)

a = !null

HELP, a

 

A               UNDEFINED = !NULL

 

그리고 다음과 같이 !null TEMPORARY 함수를 혼용하는 방법도 있습니다.

 

a = FINDGEN(100)

!null = TEMPORARY(a)

HELP, a

 

A               UNDEFINED = <Undefined>

 

 방법으로도 역시 유사한 효과를 얻을  있습니다물론 HELP 의하여 출력된 문구 자체는 약간 다르긴 하지만배열 a 점유하고 있던 메모리가 제거된다는 측면은 동일합니다따라서   어느 방법을 사용해도  차이는 없다고 봐도 됩니다.

 

사실 변수나 배열을 제거하는데 있어서 사용 가능한 DELVAR라는 명령이 있긴 합니다그런데  DELVAR 명령은 IDL 커맨드 프롬프트 모드에서만 제거의 효과를 제대로 발휘할 뿐이고IDL 프로그램 내에서 사용될 경우에는 전혀 효과가 없다 점을 유의해야 합니다 다음과 같이 IDL 커맨드 프롬프트상에서 DELVAR 명령을 이용하면 제거의 효과가 제대로 반영됩니다.

 

IDL> a = FINDGEN(100)

IDL> DELVAR, a

IDL> HELP, a

A               UNDEFINED = <Undefined>

 

하지만  내용이 IDL 프로그램 내에 포함되어 있을 경우에는  프로그램을 실행해도 제거의 효과가 전혀 없습니다 다음과 같은 내용이 담긴 프로그램을실행해보면   있습니다.

 

PRO test_delvar

 

a = FINDGEN(100)

DELVAR, a

HELP, a

 

END

 

A               FLOAT     = Array[100]


따라서 IDL 프로그램 내에서 변수나 배열을 직접 제거하기 위해서는 DELVAR 사용하지 말고 앞서 언급한 두가지 방법(!null TEMPORARY 이용)을 적용해야 제대로 효과   있다는 점을 반드시 유념하시기 바랍니다.

Reply all
Reply to author
Forward
0 new messages