본문 바로가기
Python 파이썬/numpy

numpy ) 난수 random

by 하이방가루 2022. 3. 19.
728x90
반응형

난수생성

rand  : 0부터 1사이의 균일 분포로 실수 난수를 생성

randn: 기대값이 0이고 표준편차가 1가우시안 표준 정규 분포를 따르는 난수를 생성

np.random.seed(정수)  # 시작 숫자를 정해 주면 항상 같은 숫자의 난수 발생

np.random.rand(정수x)  # 난수 x개 발생

np.random.seed(0)  # 시작 숫자를 정해 주어 항상 같은 숫자의 난수 발생
print(np.random.rand(5))  # 난수 5개 발생
# [0.5488135  0.71518937 0.60276338 0.54488318 0.4236548 ]
print(np.random.randn(5))
# [-0.84272405  1.96992445  1.26611853 -0.50587654  2.54520078]

randint: 균일 분포의 정수 난수

numpy.random.randint([low=0,] high[, size=None])

size는 반환되는 배열의 크기

#seed를 정하지 않아 매 실행마다 숫자가 바뀐다.
print(np.random.randint(10)) # int 타입 반환
# 8
print(np.random.randint(10, size=1)) # numpy.ndarray 타입 반환
# [4]
print(np.random.randint(10, size=5))
# [6 5 8 2 3]
print(np.random.randint(10, 20, size=5))
# [19 17 15 13 14]
print(np.random.randint(10, 20, size=(3, 5)))
# [[15 13 13 17 19]
#  [19 19 17 13 12]
#  [13 19 17 17 15]]

데이터의 순서 바꾸기 np.random.suffle(배열)

x = np.arange(10)
print(x)
# [0 1 2 3 4 5 6 7 8 9]
np.random.shuffle(x)  # 데이터 순서 바꿈
print(x)
# [5 7 4 3 6 9 0 8 2 1]

샘플링 sampling

numpy.random.choice(a, size=None, replace=True, p=None)

 a : 배열이면 원래의 데이터, 정수이면 arange(a) 명령으로 데이터 생성

size : 반환되는 배열의 크기

 replace : 기본값 True, True이면 한번 선택한 데이터를 다시 선택 가능(중복선택)

 p : 배열. 각 데이터가 선택될 수 있는 확률 (모든 확률의 합은 1(100%)이 되어야 한다.)

x = np.arange(10)
print(np.random.choice(x, len(x), replace=False)) # shuffle 명령과 같다.
# [9 1 4 2 7 0 6 3 5 8]
print(np.random.choice(5)) # int 타입 반환
# 3
print(np.random.choice(5,1)) # numpy.ndarray 타입 반환
# [4]
print(np.random.choice(5, 5, replace=False)) # 0~5까지 중 5번 선택, 중복x
# [3 4 0 1 2]
print(np.random.choice(5, 3, replace=False))  # 0~5까지 중 3번 선택, 중복x
# [1 3 2]
print(np.random.choice(5, 10))  # 중복허용, 10번 선택
# [3 2 3 0 0 0 3 4 4 2]
print(np.random.choice(5, 10, p=[0.1, 0, 0.3, 0.6, 0]))  # 선택 확률을 다르게 해서 10번 선택
# [2 2 3 3 3 2 2 2 3 0]
# 0-10% 1-0% 2-30% 3-60% 4-0% 확률로 선택
# 1,4 는 0%이기때문에 절대 나오지 않는다.

 

728x90
반응형

댓글