넘파이를 활용하면 무작위 데이터를 쉽게 생성할 수 있다. 무작위의 난수를 생성하는 건 넘파이의 numpy.random 모듈을 활용하면 되는데 이 도구를 사용해서 어떻게 난수를 생성할 수 있는지, 그리고 어떻게 활용할 수 있는지, 시드(seed)란 무엇이며 시드 설정은 어떻게 할 수 있는지 간단히 알아보도록 하자.
넘파이에서 난수 생성하기
넘파이의 numpy.random 모듈은 다양한 난수 생성 기능을 제공한다. 대표적인 함수를 정리해 보았다.
np.random.rand()
0과 1 사이의 균등 분포에서 난수를 생성한다. 인자로 원하는 shape를 지정할 수 있다.
import numpy as np
# 0과 1 사이의 난수 1개 생성
print(np.random.rand()) # 0.5488135039273248
# 2x3 크기의 난수 배열 생성
print(np.random.rand(2, 3))
# [[0.71518937 0.60276338 0.54488318] [0.4236548 0.64589411 0.43758721]]
np.random.randn()
표준 정규 분포(평균 0, 표준편차 1)에서 난수를 생성한다.
# 표준 정규 분포에서 난수 1개 생성
print(np.random.randn()) # 0.33490106
# 3x3 크기의 난수 배열 생성
print(np.random.randn(3, 3))
"""
[[-0.91048031 0.34628186 1.14990193]
[ 0.87998527 0.33490106 2.80499328]
[ 1.30758366 -1.16693797 1.42750446]]
"""
np.random.randint()
지정한 범위의 정수 난수를 생성한다.
# 0 이상 10 미만의 정수 난수 1개 생성
print(np.random.randint(0, 10)) # 9
# 1 이상 100 이하의 정수로 4x4 배열 생성
print(np.random.randint(1, 101, size=(4, 4)))
"""
[[15 11 29 31]
[ 7 43 71 8]
[78 17 34 69]
[14 24 77 17]]
"""
난수의 활용 사례
난수는 단순히 "랜덤한 숫자"를 만드는 것뿐만 아니라, 다양한 실전 시나리오에서 활용될 수 있다. 몇 가지 예시를 살펴보자.
데이터 샘플링
데이터를 분석하거나 테스트할 때, 기존 데이터에서 무작위로 샘플을 추출해야 할 때가 있다. 이때는 np.random.choice를 사용하면 된다.
# 데이터 샘플링
data = [1, 2, 3, 4, 5]
sample = np.random.choice(data, size=3, replace=False) # 중복 없이 3개 샘플 추출
print(sample) # [5, 4, 2]
시뮬레이션
난수를 사용하면 다양한 가상 시뮬레이션을 구현할 수 있다. 예를 들어 주사위를 100번 던지는 시뮬레이션은 다음과 같이 구현할 수 있다:
# 1~6 사이의 주사위를 100번 던짐
dice_rolls = np.random.randint(1, 7, size=100)
print(dice_rolls)
데이터 셔플링
머신러닝에서는 데이터를 학습용과 테스트용으로 나눌 때, 데이터를 섞는 작업이 필요하다. np.random.shuffle로 간단히 해결 가능하다.
# 데이터 섞기
data = np.array([1, 2, 3, 4, 5])
np.random.shuffle(data)
print(data) # [3, 4, 5, 2, 1]
재현 가능성을 위한 시드 설정
난수는 기본적으로 매번 다른 값을 생성하지만, 특정 상황에서는 동일한 결과를 얻어야 할 때가 있다. 이런 경우 시드(seed)를 설정하면 된다.
# 시드 설정
np.random.seed(42)
# 동일한 난수 생성
print(np.random.rand(3))
출력 결과는 시드 값이 같다면 항상 동일하다.
고급 활용: 확률 분포 난수 생성
넘파이는 특정 확률 분포에서 난수를 생성하는 함수도 제공한다. 몇 가지 예를 들면:
- np.random.normal: 정규 분포
- np.random.uniform: 균등 분포
- np.random.binomial: 이항 분포
# 평균 0, 표준편차 1인 정규 분포에서 5개의 난수 생성
normal_randoms = np.random.normal(0, 1, size=5)
print(normal_randoms) # [-1.11188012, 0.31890218, 0.27904129, 1.01051528, -0.58087813]
# 0과 10 사이의 균등 분포에서 3개의 난수 생성
uniform_randoms = np.random.uniform(0, 10, size=3)
print(uniform_randoms) # [1.8340451, 3.04242243, 5.24756432]
정리
넘파이는 다양한 난수 생성 방법을 제공하며, 이를 활용해 데이터 샘플링, 시뮬레이션, 데이터 셔플링 등 여러 작업을 수행할 수 있다. 또한, 재현 가능성을 위해 시드 설정도 가능하며, 정규 분포, 균등 분포 등 특정 확률 분포에서 난수를 생성할 수도 있다. 아래의 내용을 요약해 보자.
- 기본 함수: rand, randn, randint 등.
- 활용 사례: 데이터 샘플링, 시뮬레이션, 데이터 셔플링.
- 시드 설정: 재현 가능성을 위해 필요.
- 확률 분포 난수: 정규 분포, 균등 분포 등 다양한 옵션.
넘파이의 난수 생성은 데이터 분석과 머신러닝, 시뮬레이션 등에서 없어서는 안 될 도구라는 것 기억하자!
'Language > Python' 카테고리의 다른 글
[Python] 넘파이를 활용한 다양한 통계 처리 함수 알아보기 (0) | 2025.02.04 |
---|---|
[Python] 넘파이(Numpy) 배열 알아보기 (0) | 2025.01.29 |
[Python] 파이썬을 배우면 무엇을 할 수 있을까? 파이썬 대표 라이브러리 알아보기 (6) | 2025.01.24 |
[Python] 파이썬에서 자주 사용하는 내장 함수 정리 (1) | 2025.01.23 |
[Python] 파이썬 연산자 오버로딩 이해하기 (0) | 2025.01.22 |