어떤 배열에 일정한 갯수의 값들이 있습니다. 그런데 이 배열 내의 값들 중에서 일부만 추출하고 싶은 경우가 있습니다. 즉 배열 내의 모든 값들 중에서 일부 값들만 추려내는 작업인 샘플링(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:-1:2]
PRINT, aa
이것은 문법적으로 보면 배열 a의 맨 처음 값(인덱스는 0)부터 맨 마지막 값(인덱스는 -1)까지 2의 간격으로 인덱스를 건너뛰면서 추려내라는 의미입니다. 이와 같이 추려낸 값들로 구성된 배열 aa의 값들은 다음과 같습니다.
9 91 78 78 1
그리고 만약 위치를 하나 옮겨서 샘플링을 하고 싶을 경우도 있습니다. 즉 다음과 같이 붉은색으로 강조된 값들을 추출하는 것입니다.
9 11 91 56 78 52 78 77 1 28
이러한 추출은 다음과 같이 처리합니다.
aa = a[1:-1:2]
PRINT, aa
이 경우의 결과는 다음과 같습니다.
11 56 52 77 28
만약 1차원이 아닌 다차원 배열일 경우에는 각 차원별로 위와 같은 방식의 샘플링을 하면 됩니다. 예를 들어 100x100의 구조를 갖는 2차원 배열 b가 있다고 합시다.
b = FIX(RANDOMU(-1, 100, 100)*100)
이 때 각 차원별로 10의 간격으로 샘플링을 한다면 그 방식은 다음과 같습니다.
bb = b[0:-1:10, 0:-1:10]
이렇게 하면 bb는 b로부터 샘플링된 값들로 구성된 10x10 구조의 배열이 됩니다. 실제로 bb의 값들을 출력해보면 다음과 같습니다.
9 96 98 82 24 60 81 3 9 37
38 59 65 16 65 1 42 95 91 54
97 7 17 31 7 61 98 30 67 94
94 25 22 24 5 35 96 56 12 15
21 4 94 61 64 40 98 78 79 74
52 42 58 73 51 44 17 67 58 7
29 2 53 32 19 9 92 78 78 1
90 97 21 34 29 5 45 56 85 56
82 10 89 90 16 4 9 63 8 73
12 10 7 16 79 52 27 82 42 32
어쨌든 이와 같은 방식으로 샘플링을 하면 원래 원소 갯수가 많았던 배열로부터 일부 값들만 추려내어 간소화된 배열을 얻는 것이 가능합니다. 하고자 하는 작업의 성격에 따라서는 이런 과정이 필요할 경우가 가끔 있는데, 그 때 이러한 방법을 참조하시면 좋을 것 같습니다.
'IDL > 배열 생성 및 처리' 카테고리의 다른 글
ARRAY_INDICES 함수의 필요성 (1) | 2024.02.14 |
---|---|
원소값들을 직접 표기하여 배열을 생성하는 법 (3차원까지) (0) | 2023.11.29 |
배열 합치기(Array Concatenation) [2] (0) | 2023.04.18 |
배열 합치기(Array Concatenation) [1] (0) | 2023.04.11 |
INDGEN 함수 사용시 주의할 점 (0) | 2023.02.16 |