SMALL

IDL/배열 생성 및 처리 22

BYTSCL 함수의 이해와 활용법

오늘은 IDL에서 널리 사용되는 함수들 중 하나인 BYTSCL 함수에 관하여 살펴보고자 합니다. 이 함수의 역할은 그 명칭에서도 대략 짐작이 가능한데요. 바로 바이트 스케일링(Byte Scaling)입니다. 기본적으로는 다수의 값들로 구성된 배열에 대하여 최소값 및 최대값의 범위를 기반으로 모든 값들을 0~255 사이의 범위로 재조정하는 처리를 의미합니다. 즉 배열 내 모든 값들을 일괄적으로 0~255의 바이트스케일(Byte Scale)로 환산하는 역할이라고 볼 수 있습니다. 일단 IDL 도움말에서 BYTSCL 함수에 관한 내용을 찾아보면 사용 문법이 다음과 같이 명시되어 있습니다. Result = BYTSCL( Array [, MAX=value] [, MIN=value] [, /NAN] [, TOP=v..

배열 내 특정 값들의 탐색

어떤 배열이 주어졌을 때 그 안에서 특정한 값을 찾아내고 싶은 경우를 가정해봅시다. 실제로 이러한 경우는 드물지 않습니다. 그렇다면 특정한 값을 배열 내에서 찾아내고자 하는 경우에는 어떻게 처리를 해야 할까요? 사실 어떻게 보면 매우 간단한 문제일 수도 있습니다. 예를 한번 들어봅시다. 다음과 같이 1차원 배열이 주어진 상황을 가정해봅니다. data = [14, 58, 47, 92, 25, 66] 이렇게 6개의 값들로 구성된 1차원 배열 data가 있습니다. 여기서 25라는 값을 탐색하고자 합니다. 어떤 방법으로 처리하는 것이 좋을까요? 아무래도 이런 경우에는 WHERE 함수를 떠올리는 것이 인지상정(?)일 것 같습니다. 그렇다면 아마도 다음과 같이 처리하면 될 것 같습니다. ww = WHERE(data..

ARRAY_INDICES 함수의 필요성

오늘 살펴보고자 하는 ARRAY_INDICES 함수에 관해서는 예전에 몇몇 게시물들을 통하여 간접적으로 언급했던 적이 있긴 합니다만, 오늘은 이 함수 자체에 좀 더 촛점을 맞춰서 다뤄보고자 합니다. 이 함수는 특히 다차원(2차원, 3차원 등) 배열을 취급할 때 그 필요성이 커지는데요. 예제와 함께 그 쓰임새를 살펴봅시다. 먼저 다음과 같이 4x3의 구조를 갖는 2차원 배열을 하나 가정해보겠습니다. arr = INTARR(4, 3) arr[1, 2] = 1 arr[2, 1] = 2 arr[3, 1] = 1 PRINT, arr 여기서 정의된 배열 arr의 값들이 출력된 모습은 다음과 같습니다. 0 0 0 0 0 0 2 1 0 1 0 0 이 배열 내에서 최대값은 2일 것입니다. 그리고 최대값인 2가 배열 ar..

원소값들을 직접 표기하여 배열을 생성하는 법 (3차원까지)

IDL에서 배열(Array)을 생성하는데 있어서는 각종 배열 생성용 함수들(INTARR, INDGEN 등)을 이용하는 방법도 있지만, 배열을 구성할 원소값들을 내가 직접 표기하여 작성하는 방법도 있습니다. 먼저 1차원 배열의 예를 보면 다음과 같습니다. IDL> a = [64, 81, 92, 77, 59] IDL> HELP, a A INT = Array[5] IDL> PRINT, a 64 81 92 77 59 이와 같이 꺾쇠괄호를 사용하여 그 안에 원소값들을 따옴표로 구분하여 표기하는 방식입니다. 여기서는 5개의 값들로 구성된 정수형 배열을 생성해본 것입니다. 그러면 이번에는 원소값들을 직접 표기하여 2차원 배열을 생성하는 방법을 살펴봅시다. 이를 위해서는 꺾쇠괄호를 2중으로 사용해야 합니다. 예제를 보..

배열 내 값들에 대한 샘플링(Sampling)

어떤 배열에 일정한 갯수의 값들이 있습니다. 그런데 이 배열 내의 값들 중에서 일부만 추출하고 싶은 경우가 있습니다. 즉 배열 내의 모든 값들 중에서 일부 값들만 추려내는 작업인 샘플링(Sampling)을 하는 경우입니다. 예를 들면 다음과 같이 0~100의 범위를 갖는 10개의 정수값들로 구성된 a라는 배열을 가정해봅시다. a = FIX(RANDOMU(-1, 10)*100) PRINT, a 출력된 값들은 다음과 같습니다. 9 11 91 56 78 52 78 77 1 28 그런데 이 10개의 값들 중에서 하나 건너 하나씩 값을 추려내보고자 합니다. 즉 다음과 같이 붉은색으로 강조된 값들만 추려내는 것입니다. 9 11 91 56 78 52 78 77 1 28 그 방법은 다음과 같습니다. aa = a[0:-..

배열 합치기(Array Concatenation) [2]

지난 회에서는 배열 합치기(Array Concatenation) 즉 배열과 배열을 합쳐서 더 큰 배열을 만드는 기법에 관하여 1차원 및 2차원 배열에 대한 방법들을 소개하였습니다. 오늘은 3차원 배열에 대한 방법을 소개해보고자 합니다. 아무래도 배열의 차원이 높아질수록 그 문법이 좀 더 복잡해지긴 합니다. 그러면 먼저 다음과 같이 4x5x3의 구조를 갖는 3차원 배열 a를 가정해봅시다. a = FIX(RANDOMU(-1, 4, 5, 3)*50) HELP, a PRINT, a 이러한 3차원 배열은 그 세부값들을 출력해보면 다음과 같이 각각의 층(XY 평면)별로 나타납니다. 4 5 45 28 39 26 39 38 0 14 48 25 29 34 7 34 45 8 27 32 49 41 20 38 16 23 9 ..

배열 합치기(Array Concatenation) [1]

오늘은 배열 합치기(Array Concatenation)에 관하여 살펴보고자 합니다. 이것은 어떤 배열이 있을 때 또 다른 배열을 합쳐서 더 큰 배열을 만드는 작업을 의미합니다. 이게 영문으로는 Concatenation이라고 하는데, 단어상으로는 '연결'이라는 의미이기도 합니다만, 여기서는 '합치기'라는 용어로 불러보겠습니다. 사실 배열과 배열을 합친다는 개념 자체는 그리 어려운 것은 아닙니다. 다만 그런 작업을 할 경우에 어떤 문법을 따라야 하느냐가 관건입니다. 특히나 차원이 높은 배열일 경우에는 그 문법이 복잡한 측면이 있습니다. 그러면 배열의 차원별로 알아보겠습니다. 1차원 배열의 경우는 그 과정이 비교적 단순한 편입니다. 먼저 다음과 같이 5개의 원소값들로 구성된 a라는 배열이..

INDGEN 함수 사용시 주의할 점

아마 IDL 사용자라면 이미 많이들 알고계시겠지만, INDGEN 함수는 0으로 시작하여 1씩 증가하는 정수형 값들로 구성된 배열을 생성하는 역할을 하는 함수입니다. 예를 들어서 다음과 같이 INDGEN(10)이면 0부터 9까지 1씩 증가하는 정수형 값들로 구성된 배열이 생성됩니다. IDL> a = INDGEN(10) IDL> HELP, a A INT = Array[10] IDL> PRINT, a 0 1 2 3 4 5 6 7 8 9 그런데 이 INDGEN 함수를 사용할 때 유의해야할 사항이 있습니다. 상당히 많은 갯수의 정수형 연속값들로 구성된 배열을 생성해야하는 경우입니다. 예를 들어서 5만개의 연속 정수값들로 구성된 배열을 생성하는 경우를 봅시다. IDL> a = INDGEN(50000) IDL> HE..

배열 처리 함수 소개 (SHIFT, REVERSE, ROTATE) [2]

IDL에서는 배열에 대한 각종 처리 작업을 지원하는 여러 종류의 기능 함수들이 있는데 그 중에서 SHIFT, REVERSE, ROTATE 함수들에 대하여 각각 관련 예제와 함께 소개해보고자 합니다. 지난 회차에서는 SHIFT 및 REVERSE 함수에 관하여 알아보았고 오늘은 ROTATE 함수에 관하여 알아보도록 하겠습니다. ROTATE 함수는 대상 배열을 회전(rotate) 또는 전치(transpose)시키는 역할을 합니다. 적용 대상 배열의 차원은 1차원 또는 2차원만 가능합니다. 그리고 회전에 있어서는 90도 단위의 회전만 가능합니다. 90도로 제한되지 않는 임의의 각도로 회전하는 기능은 지원되지 않으며, 만약 이러한 처리가 필요할 경우에는 제가 얼마전에 소개했던 ROT 함수..

배열 처리 함수 소개 (SHIFT, REVERSE, ROTATE) [1]

IDL에서는 배열에 대한 각종 처리 작업을 지원하는 여러 종류의 기능 함수들이 있는데 그 중에서 SHIFT, REVERSE, ROTATE 함수들에 대하여 각각 관련 예제와 함께 소개해보고자 합니다. SHIFT 함수는 배열의 특정한 차원에 대하여 임의의 갯수만큼 이동(Shift)시키는 역할을 합니다. 적용 대상 배열의 차원에는 제한이 없습니다. 예를 들어 1차원 배열에 대하여 적용해본 예제는 다음과 같습니다. a = [1, 2, 3, 4, 5] a_f = SHIFT(a, 2) PRINT, a_f 4 5 1 2 3 여기서는 1차원 배열 a에 대하여 2만큼 이동을 시킨 결과 배열 a_f를 얻었습니다. 출력된 내용을 보면 우측으로 2만큼 이동시킨 결과임을 확인할 수 있습니다. 반대 방향으..

728x90