난수 생성 - numpy
2022. 7. 16. 00:54ㆍProgramming Language/Python
난수(Random number)를 생성하는데에는 2가지 방법이 있습니다. 하드웨어 난수 생성기를 이용하는 방법과 유사난수 생성기를 이용하는 방법
- 하드웨어 난수 생성기(Hardware Random Number Generator)
물리적인 처리를 통해 예측이 불가능한 난수를 생성
e.g. 마이크로 자연의 노이즈를 입력받아 난수 생성(갓 노이만 선생님께서 쓰신 방법) - 유사난수 생성기(Pseudo Random Number Generator)
난수를 흉내내기 위한 알고리즘을 사용하는 SW
e.g. MT19937(Mersenne Twister)
메르센 트위스터(Mersenne Twister)란?
유사난수 생성기 중 하나로 질 좋은 난수를 빠르게 생성할 수 있다. 그러나 암호학적으로 안전하지는 않다.
제가 알기론 numpy의 디폴트 난수 생성기가 이겁니다.
메르센 트위스터가 난수를 생성하는 방식은
- seed 값(np.random.seed()로 설정한 값)을 초기값으로 놓고 특정 점화식을 통해 624개의 값을 생성합니다.
- random number가 필요해지면 위의 배열에서 값을 하나씩 뽑아 임의의 변형 과정을 거친 후 리턴합니다.
- 624개의 값을 모두 사용했으면 twister로 새로 624개의 값을 생성합니다.
np.random.seed는 맨 처음 초기값으로만 쓰이므로 624개가 넘는 난수를 생성했다면 다음 624개의 값은 어떤 값일지 예측이 어렵습니다.
따라서 좀 더 세밀하게 random성을 control하고 싶은 경우에는 np.random.get_state, np.random.set_state로 624개의 배열을 통째로 저장/복원하는 방식을 쓰면 됩니다.
Reference
'Programming Language > Python' 카테고리의 다른 글
datetime, zoneinfo 모듈의 호환성 (0) | 2025.04.16 |
---|---|
Relative import (0) | 2025.01.12 |
.py 배포 (0) | 2022.07.14 |
Miniconda 소개 (0) | 2021.12.22 |
[분산, 병렬 처리] Ray (0) | 2021.10.20 |