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는 이외에도 다양한 분포의 난수를 생성할 수 있으므로, 필요에 따라 적절한 분포를 선택해 활용할 수 있습니다.
'Python NumPy' 카테고리의 다른 글
NumPy 선형대수 - 행렬 곱셈 (dot, matmul) (0) | 2025.02.06 |
---|---|
NumPy로 배우는 선형대수(Linear Algebra) 기초 (0) | 2025.02.05 |
NumPy 시드 고정 및 난수 배열 생성하기 (0) | 2025.02.03 |
NumPy 난수 생성 (random 모듈 사용) (0) | 2025.02.02 |
NumPy 누적 함수 cumsum과 cumprod (0) | 2025.02.01 |