[Numpy 강좌 – 8] 넘파이(NumPy)의 난수 생성과 랜덤 샘플링 이해하기

1. 난수 생성

 

난수 생성은 컴퓨터 프로그래밍에서 자주 사용되는 기능 중 하나입니다. 통계적 분석, 머신러닝, 시뮬레이션, 암호화 등 다양한 분야에서 사용됩니다. NumPy는 효과적인 난수 생성을 위한 몇 가지 함수를 제공합니다. 아래 함수들은 모두 랜덤 값을 생성하는 역할을 합니다. 이 값들은 모두 의사 난수(pseudo random number)입니다. 즉, 수학적 알고리즘을 통해 생성된 랜덤한 값입니다.

 

  • np.random.rand() : 0과 1 사이에서 균일 분포를 따르는 난수를 생성합니다. 함수에 전달된 인수의 개수에 따라 다차원 배열을 생성하는 데 사용할 수 있습니다. 예를 들어, np.random.rand(5,3)을 호출하면 5x3 크기의 배열이 생성되며, 각 요소는 0과 1 사이의 랜덤한 숫자입니다.
  • np.random.randn() : 표준 정규 분포(평균이 0이고 표준편차가 1인 분포)를 따르는 난수를 생성합니다.
  • np.random.randint() : 특정 범위 내에서 랜덤한 정수를 생성합니다. 두 개의 인수를 받으며, 첫 번째 인수는 범위의 시작(포함)이고 두 번째 인수는 범위의 끝(비포함)입니다.
  • np.random.random() : 0과 1 사이에서 균일 분포를 따르는 난수를 생성합니다. 인수로 튜플을 받아 다차원 배열을 생성할 수 있습니다.

 

아래 코드는 다양한 난수 생성 함수를 사용하는 방법을 보여줍니다.

import numpy as np

# rand: 0과 1 사이의 균일 분포에서 난수 생성
print("Random number between 0 and 1: ", np.random.rand())

# randn: 표준 정규 분포에서 난수 생성
print("Random number from standard normal distribution: ", np.random.randn())

# randint: 주어진 범위에서 임의의 정수 생성
print("Random integer between 1 and 10: ", np.random.randint(1, 10))

# random: 0과 1 사이의 균일 분포에서 난수 생성 (rand와 비슷하지만 다른 형태의 인자를 받음)
print("Random number between 0 and 1: ", np.random.random())

 


2. 랜덤샘플링

 

랜덤 샘플링은 주어진 데이터 집합에서 임의로 선택하는 과정을 말합니다. NumPy에서는 랜덤 샘플링을 위한 몇 가지 함수를 제공하고 있습니다. 아래 함수들은 모두 무작위로 데이터를 선택하거나 순서를 바꾸는 역할을 하며, 이는 데이터를 무작위로 섞거나 특정 개수의 데이터를 랜덤하게 선택하는 등의 작업에서 매우 유용합니다.

 

  • np.random.choice() : 주어진 1차원 배열에서 임의의 요소를 선택합니다. 두 번째 인자로 정수를 전달하면 해당 개수만큼의 요소를 랜덤하게 선택합니다.
  • np.random.shuffle() : 주어진 배열의 순서를 랜덤하게 바꿉니다. 이 함수는 원래 배열 자체를 변경합니다. 원본 배열을 유지하고 싶은 경우에는 np.random.permutation() 함수를 사용합니다.
  • np.random.permutation() : 주어진 배열의 랜덤한 순열을 반환합니다. 이 함수는 원래 배열에 영향을 주지 않으므로, 원래 배열을 그대로 유지하면서 랜덤하게 순서를 바꿔야 할 때 사용합니다.

 

아래 코드는랜덤 샘플링 및 배열 재배치 함수를 사용하는 방법을 보여줍니다.

# choice: 주어진 배열에서 임의의 요소 선택
arr = np.array([1, 2, 3, 4, 5])
print("Random choice from array: ", np.random.choice(arr))

# shuffle: 배열을 무작위로 섞음 (원래 배열을 바꿈)
np.random.shuffle(arr)
print("Array after shuffle: ", arr)

# permutation: 배열의 무작위 순열을 반환 (원래 배열을 바꾸지 않음)
print("Random permutation of array: ", np.random.permutation(arr))