개요
2022.12.02 - [Python] NumPy - 난수 발생과 카운팅 1에 이어 마저 내용을 정리한다.
난수 생성
np.random 패키지는 rand 함수 이외에도 난수를 생성하는 함수를 제공하는데, 그중 많이 사용하는 것은 rand 함수를 포함하여 3가지이다.
rand
0부터 1사이의 균일한 확률 분포로 실수 난수를 생성한다. 매개변수로 생성할 난수의 크기를 지정하는데, 여러 개의 인수를 넣으면 해당 크기를 가진 행렬을 생성한다.
np.random.rand(10)
np.random.rand(3, 5)
# 실행 결과
array([0.95894927, 0.65279032, 0.63505887, 0.99529957, 0.58185033,
0.41436859, 0.4746975 , 0.6235101 , 0.33800761, 0.67475232])
array([[0.31720174, 0.77834548, 0.94957105, 0.66252687, 0.01357164],
[0.6228461 , 0.67365963, 0.971945 , 0.87819347, 0.50962438],
[0.05571469, 0.45115921, 0.01998767, 0.44171092, 0.97958673]])
randn
기댓값이 0이고 표준편차가 1인 표준 정규 분포를 따르는 난수를 생성한다.
np.random.randn(10)
# 실행 결과
array([ 0.14404357, 1.45427351, 0.76103773, 0.12167502, 0.44386323,
0.33367433, 1.49407907, -0.20515826, 0.3130677 , -0.85409574])
randint
균일한 분포의 정수 난수를 생성하는 함수이다. 매개변수로 시작 값과 끝 값, 그리고 난수의 개수를 전달받는다.
numpy.random.randint(low, high=None, size=None)
# low : high를 입력하지 않았을 때의 끝값. 0부터 low 사이의 난수를 발생한다.
# high : low와 high 사이의 난수를 발생한다.
# size : 난수의 수
# 예시
np.random.randint(10, 20, size=10)
# 실행 결과
array([19, 19, 10, 14, 17, 13, 12, 17, 12, 10])
정수 데이터 카운팅
발생시킨 난수가 정수이면 unique, bincount 함수로 데이터를 분석할 수 있다.
unique
데이터에서 중복을 제거한 목록을 출력한다. return_counts 매개변수를 True로 설정하면 각 값을 가진 데이터의 수도 출력한다.
index, count = np.unique([11, 11, 2, 2, 34, 34], return_counts=True)
index
count
# 실행 결과
array([ 2, 11, 34])
array([2, 2, 2], dtype=int64)
다만 데이터가 존재하는 값에 대해서만 개수를 세기 때문에, 데이터가 없는 경우의 정보도 필요할 때는 적절하지 않다.
bincount
bincount는 0부터 minlength - 1까지의 숫자에 대한 개수를 센다. 따라서
np.bincount([1, 1, 2, 2, 2, 3], minlength=6)
# 실행 결과
array([0, 2, 3, 1, 0, 0], dtype=int64)
데이터가 주사위를 던졌을 때 나온 수와 같이 특정 범위 안의 수라면 bincount 함수에 minlength 매개변수를 설정하는 것이 더 적절할 수 있다.
참고 문서