IDL/배열 생성 및 처리

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

이상우_idl 2023. 5. 26. 15:13
728x90
반응형

어떤 배열에 일정한 갯수의 값들이 있습니다. 그런데 이 배열 내의 값들 중에서 일부만 추출하고 싶은 경우가 있습니다. 즉 배열 내의 모든 값들 중에서 일부 값들만 추려내는 작업샘플링(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

 

어쨌든 이와 같은 방식으로 샘플링을 하면 원래 원소 갯수가 많았던 배열로부터 일부 값들만 추려내어 간소화된 배열을 얻는 것이 가능합니다. 하고자 하는 작업의 성격에 따라서는 이런 과정이 필요할 경우가 가끔 있는데, 그 때 이러한 방법을 참조하시면 좋을 것 같습니다.

반응형