배열에서 특정값들을 빼버리는 방법

IDL에는 비교적 최근에 등장한 LIST() 같은 고급 자료형이 아니라면, 배열과 같은 자료형에서 원치 않는 값을 직접 제거하는 방법은 없습니다. 그렇지만 간단하게 해결할 수 있습니다. 생각을 반대로 바꾸어야 하는 것인데, “원치 않는 값을 제거한다”에서 생각을 “원하는 값들만 뽑아낸다”로 바꾸면 간단해집니다.

예를 들면,

배열에서 원하지 않는 값을 빼야 할 때가 종종 등장합니다. 다음과 같은 경우죠.

과학자들이 다루는 많은 파일에서 데이터를 저장할 때, 쓸모 없는 값(결측, 기기 이상 등)을 -999나 -9999 등으로 특정한 값을 써 넣습니다. (마지막에 설명할 NaN -Not a Number, IDL에서는 !values.f_nan – 을 사용하는 방법도 있습니다만, Text 파일로 쓸 때는 -9999 같은 방법이 더 많이 사용됩니다). 그래서 파일을 읽은 뒤 어떤 처리를 할 때 이들 값을 제외해야 할 상황이 종종 발생합니다.

예를 들어 위 데이터의 평균값을 구할 때 -999를 제거하지 않는다면,

이와 같이 원치 않는 결과를 얻게 됩니다. -999 때문이죠.

우리가 원하는 상황이 a라는 배열에서 -999를 빼고 계산하는 것이라면 어떻게 해야 할까요? 앞에 설명했듯이, 원치 않는 값을 제거하려 하면 어렵습니다. “원하는 값만 뽑아낸다”고 생각하는 쪽이 쉽습니다.

원하는 값, 즉 조건에 맞는 값들을 찾아내는 것은 IDL에서 당연히 where() 함수의 몫입니다.

이제 원하는 값들만을 가지고 평균값 계산을 할 수 있게 됩니다.

만일 배열에서 결측값이나 장비 이상값을 NaN으로 처리했다면 다음과 같이 일이 좀 더 간단해집니다.

이 경우에 만일 /NAN 이라는 키워드를 사용하지 않는다면, 다음과 같이 그 결과도 NaN으로 출력됩니다. 즉 mean과 같은 함수에서 /NAN 이라는 키워드는, “데이터에서 NaN이 등장하면 이를 제외하고 처리하라”는 의미가 됩니다.