Python NumPy

NumPy로 분포별 난수 생성하기

PyExplorer 2025. 2. 4. 09:02
728x90

NumPy로 분포별 난수 생성하기

NumPy는 파이썬의 강력한 수치 계산 라이브러리로, 데이터 분석과 과학 계산에서 널리 사용됩니다. 이 포스팅에서는 NumPy의 난수 생성 기능 중에서 분포별 난수 생성 방법에 대해 다루어 보겠습니다. 특히, 균등 분포 (Uniform Distribution)정규 분포 (Normal Distribution)를 중심으로 설명하고, 각 분포의 특성과 사용 방법을 예제와 함께 알아보겠습니다.

NumPy 난수 생성 개요

NumPy는 numpy.random 모듈을 통해 다양한 난수를 생성할 수 있습니다. numpy.random은 다음과 같은 기능을 제공합니다:

  • 균등 분포 (Uniform Distribution)
  • 정규 분포 (Normal Distribution)
  • 이항 분포 (Binomial Distribution)
  • 포아송 분포 (Poisson Distribution)
  • 기타 다양한 분포

이 포스팅에서는 균등 분포정규 분포를 중심으로 다루며, 각 분포별 주요 함수와 사용 예제를 살펴보겠습니다.


균등 분포 (Uniform Distribution)

균등 분포란?

균등 분포는 일정 범위에서 모든 값이 동일한 확률로 선택되는 분포입니다. 예를 들어, 0과 1 사이에서 균등 분포를 따르는 난수를 생성하면 0.1, 0.5, 0.9 등이 같은 확률로 나타납니다.

NumPy에서 균등 분포 난수를 생성하려면 numpy.random.uniform 함수를 사용합니다.

함수 사용법

numpy.random.uniform(low=0.0, high=1.0, size=None)
  • low: 난수 생성 범위의 최소값 (기본값: 0.0)
  • high: 난수 생성 범위의 최대값 (기본값: 1.0)
  • size: 생성할 난수의 개수 또는 배열 형태 (기본값: 1개)

예제

import numpy as np

# 0과 1 사이에서 단일 난수 생성
rand_num = np.random.uniform()
print("단일 난수:", rand_num)

# 0과 10 사이에서 5개의 난수 생성
rand_array = np.random.uniform(0, 10, size=5)
print("난수 배열:", rand_array)

# 2x3 형태의 난수 배열 생성
rand_matrix = np.random.uniform(-5, 5, size=(2, 3))
print("2x3 난수 배열:\n", rand_matrix)

실행 결과 예시

단일 난수: 0.547512093776
난수 배열: [2.3414 8.9341 5.1232 3.4545 6.3421]
2x3 난수 배열:
 [[-3.21 -4.32  0.12]
  [ 1.45  3.21 -2.43]]

정규 분포 (Normal Distribution)

정규 분포란?

정규 분포는 평균을 중심으로 좌우 대칭적인 종 모양의 분포입니다. 이는 자연 현상이나 데이터 분석에서 매우 자주 관찰되는 분포로, 평균과 표준편차로 정의됩니다.

NumPy에서 정규 분포 난수를 생성하려면 numpy.random.normal 함수를 사용합니다.

함수 사용법

numpy.random.normal(loc=0.0, scale=1.0, size=None)
  • loc: 평균 (기본값: 0.0)
  • scale: 표준편차 (기본값: 1.0)
  • size: 생성할 난수의 개수 또는 배열 형태 (기본값: 1개)

예제

# 평균이 0, 표준편차가 1인 정규 분포에서 단일 난수 생성
rand_num = np.random.normal()
print("단일 난수:", rand_num)

# 평균이 10, 표준편차가 2인 정규 분포에서 5개의 난수 생성
rand_array = np.random.normal(loc=10, scale=2, size=5)
print("난수 배열:", rand_array)

# 3x3 형태의 난수 배열 생성
rand_matrix = np.random.normal(loc=0, scale=1, size=(3, 3))
print("3x3 난수 배열:\n", rand_matrix)

실행 결과 예시

단일 난수: 0.2345621234
난수 배열: [10.1234 11.4321 9.2134 8.9876 10.5432]
3x3 난수 배열:
 [[ 0.123 -1.234  0.432]
  [ 1.564  0.765 -0.543]
  [-1.342  0.321 -0.123]]

균등 분포와 정규 분포의 시각화

난수 분포를 더 잘 이해하려면, 생성된 데이터를 시각화하는 것이 좋습니다. 이를 위해 Matplotlib를 사용하여 히스토그램을 그려보겠습니다.

코드 예제

import matplotlib.pyplot as plt

# 균등 분포 난수 생성
uniform_data = np.random.uniform(-1, 1, 1000)

# 정규 분포 난수 생성
normal_data = np.random.normal(0, 1, 1000)

# 히스토그램 그리기
plt.figure(figsize=(12, 6))

# 균등 분포
plt.subplot(1, 2, 1)
plt.hist(uniform_data, bins=30, color='blue', alpha=0.7)
plt.title('Uniform Distribution')

# 정규 분포
plt.subplot(1, 2, 2)
plt.hist(normal_data, bins=30, color='green', alpha=0.7)
plt.title('Normal Distribution')

plt.show()

결과 시각화

  • 균등 분포 히스토그램: 데이터가 일정한 높이로 분포
  • 정규 분포 히스토그램: 가운데가 높은 종 모양 분포

마무리

이 포스팅에서는 NumPy를 활용하여 균등 분포정규 분포 난수를 생성하는 방법과 이를 시각화하는 방법을 배웠습니다. NumPy는 이외에도 다양한 분포의 난수를 생성할 수 있으므로, 필요에 따라 적절한 분포를 선택해 활용할 수 있습니다.