IDL/Programming

배열의 사용과 관련하여 유의해야 할 최근 변동사항

이상우_IDL 2016. 7. 25. 14:16
728x90

IDL이 계속 버전 업데이트가 되어오면서 매 버전마다 변동사항들이 항상 있어 왔습니다. 어떤 사항들은 그냥 부가적인 성격이라서 알아도 그만 몰라도 그만인 경우들도 있는데, 반면 어떤 사항들은 좀 주목해두고 유의해야 할 것들도 있습니다. 특히 배열의 생성 및 사용과 관련하여 최근 몇 년 사이에 있었던 주목할만한 변동사항들 두어가지를 언급하고자 합니다. 물론 제가 이 블로그에서 전에 언급했던 내용과 겹치는 부분도 있지만 정리하는 차원에서 재차 언급하게 됨을 미리 알려드립니다.


첫번째는 배열의 인덱스로서 마이너스 기호(-)의 사용이 허용되기 시작했다는 것입니다. 이것은 8.0 버전부터 해당됩니다. 예를 들어 다음과 같은 배열이 있다고 합시다.


IDL> data = [78, 55, 86, 70, 62]


여기서 다음과 같이 -1 인덱스로 접근을 하면 배열 내 맨 끝에 있는 원소값을 접근합니다.


IDL> PRINT, data[-1]

      62


그리고 다음과 같이 -2 인덱스를 사용하면 배열 내 맨 끝에서 두번째에 있는 원소값에 접근하는 방식입니다.


IDL> PRINT, data[-2]

      70


IDL을 좀 오래전부터 사용해오신 유저들의 경우, 예전 버전의 IDL에서는 (-) 인덱스가 전혀 허용되지 않았다는 점 그리고 위와 같이 배열 내 끝부분의 원소값 접근을 위해서는 다음과 같이 N_ELEMENTS 함수의 사용이 필요했다는 점을 기억하실 것 같습니다.


물론 이 방법도 여전히 유효합니다. 하지만 8.0 버전부터는 N_ELEMENTS 함수의 사용 없이 그냥 마이너스 값만으로도 인덱싱이 가능하다는 점을 잘 알아두고 유의해야 합니다. 마이너스 인덱스의 허용으로 인하여 유의해야 할 점은, WHERE 함수의 결과가 -1로나오는 경우입니다. 이 값으로 배열에 접근하려고 할 경우, 예전 IDL에서는 에러가 발생했지만 요즘 IDL에서는 에러가 발생하지 않고 그냥 -1로 배열 내 맨 끝 원소값에 접근한다는 차이점이 있습니다. 이 문제에 관해서는 제가 예전에 따로 올렸던 게시물이 있으므로, 이 내용을 참조하시기 바랍니다.


두번째는 배열의 생성에 있어서 좀 더 직관적인 문법이 지원되기 시작했다는 점입니다. 이것은 8.3 버전부터 해당됩니다. 예를 들어, 10부터 50까지 5씩 증가하는 값들(10, 15, 20, ...., 40, 45, 50)로 이루어진 배열을 만들 경우, 예전 버전의 IDL에서는 다음과 같이 INDGEN과 같은 내장함수를 응용하는 방법을 사용하는 것이 정석이었습니다.


IDL> data = INDGEN(9)*5+10

IDL> PRINT, data

      10      15      20      25      30      35      40      45      50


그런데 8.3 버전부터는 다음과 같이 시작값, 끝값, 변동치를 콜론 기호(:)를 사이에 두고 순서대로 적어주는 것만으로도 배열의 생성이 가능한 기능이 지원되기 시작했습니다.


IDL> data = [10:50:5]

IDL> PRINT, data

      10      15      20      25      30      35      40      45      50


아무래도 이 방법이 좀 더 직관적이고 편리합니다. 기존의 방법의 경우 배열내 원소 갯수와 변동치를 함께 고려하는 것이 필요했던 반면, 새로운 방법은 그냥 적어주기만 하면 되니까요. 다음과 같이 실수형 값들로 구성된 배열을 만들 때에도 매우 편리합니다.


IDL> data = [1:2:0.2]

IDL> PRINT, data

      1.00000      1.20000      1.40000      1.60000      1.80000      2.00000


따라서 최근 버전의 IDL을 사용하는 유저들께서는 위와 같은 변동사항들을 잘 참조해두시면 좋을 것 같습니다. 편리해진 부분도 있고더 유의해야 할 부분도 있다는 점을 잘 알아두시기 바랍니다. 그리고 당연한 얘기지만 예전 버전의 IDL과는 호환되지 않는 사항들이기 때문에, 혹시나 예전 버전의 IDL과의 호환성이 중요한 프로그램 작업을 할 경우에는 그냥 예전의 방법을 사용하는 것이 필요할 수도 있다는 점 또한 유의하시기 바랍니다.

LIST