반응형

IDL/배열 생성 및 처리 20

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만큼 이동시킨 결과임을 확인할 수 있습니다. 반대 방향으..

배열의 자료형과 값의 대입에 관한 유의사항

IDL에서 단일값 변수의 경우는 자료형이 동적으로 정의됩니다. 즉 대입되는 값에 따라서 자료형이 정의됩니다. 예를 들어 a라는 변수를 다음과 같이 정의하면 변수 a는 정수형 변수로 정의됩니다. IDL> a = 7 IDL> HELP, a A INT = 7 이랬다가 바로 a에 실수형 값을 대입하면 바로 실수형 변수로 바뀝니다. IDL> a = 5.6 IDL> HELP, a A FLOAT = 5.60000 이와 같이 변수를 처음 사용할 때 대입되는 값에 따라서 변수의 자료형이 동적으로 유연하게 정의됩니다. 그런데 배열의 경우는 어떨까요? 배열의 경우는 조금 다릅니다. 설명을 위하여 먼저 다음과 같이 정수형 값들로 구성된 배열 a를 정의합니다. IDL> a = [6, 4, 7] IDL> HELP, a A INT..

2차원 배열의 인덱스 체계의 이해 및 활용 [3]

* 지난 회차 게시물의 내용에서 바로 이어집니다. 지난 회차 게시물들에서 사용했던 예제 데이터는 5x4의 구조를 갖는 2차원 배열이었습니다. 이 데이터를 생성하고 값들을 출력하는 내용을 다시 적어봅니다. arr = FIX(RANDOMU(-1, 5, 4)*100) HELP, arr PRINT, arr ARR INT = Array[5, 4] 9 11 91 56 78 52 78 77 1 28 96 50 59 69 14 69 90 17 55 65 이와 같이 배열 내의 총 20개의 값들을 출력하여 볼 수 있습니다. 오늘은 이 2차원 배열을 이미지의 형태로 표출해봅시다. 2차원 배열을 이미지의 형태로 표출하는 것은 우리가 원래 자주 하는 일입니다. 다음과 같이 IMAGE 함수를 사용하면 됩니다. win = WIND..