2번째 모듈 탐구 이번 살펴볼 모듈은 random이다. 사실 random을 컴퓨터에서 완전히 구현하는 것은 불가하다고 본다. 일정수의 주기를 가지고 생성하는 유사 난수 생성기(PRING)로 난수를 생성하게 되는데, 이 난수를 더욱 잘 처리할 수 있게 도와주는 모듈이 random 모듈이다.
일단 random모듈에서 제공하는 함수는 Random 클래스에 정의된 클래스 메서드 이다.(random 모듈에서 제공하는 클래스는 random과 systemrandom 2가지이다.) 그중 대부분의 함수는 다음의 random.random()이라는 [0, 1.0) 사이 무작위 float를 반환하는 기본 함수에 의존한다.
난수 생성기를 관리하는 함수
random.seed(a=None) : 난수 생성기는 무엇을 기준으로 난수를 생성할지 기준(Seed값)을 가지게 된다. seed함수는 이 기준값을 초기화 하주며, None으로 정의될 경우 현재의 시스템 시간이 seed로 사용된다.
* 난수생성기의난수 생성기의 현재 상태는 getstate()로 구할 수 있고, setstate()로 설정할 수도 있다.(이를 이용하여 난수 생성기의 당시 상태를 저장, 불러올 수 있다.)
난수 생성기의 생성 함수
1. random.randbytes(n) : n자리의 무작의 byte를 생성한다/
2. random.randrange(start, stop, step) : range(start, stop, step)중 임의로 선택된 요소를 반환한다. 만약 파라미터가 1개가 주어지면 range(parameter)에서 무작위로 선택한다.
3. random.randint(a, b) : a <=N <=b에 부합하는 임의의 N을 반환한다.
4. random.getrandbits(k) : k bit로 이루어진 양의 정수를 반환한다.
5. random.random() : [0.0, 1.0)의 구간에서 임의의 부동 소수점 숫자를 반환한다.
6. random.uniform(a, b) : a <=N <=b에 부합하는 임의의 부동소수점 N을 반환한다.(b> a인 경우 반대로)
>>> import random
>>> random.randbytes(3)
b'\x81\xebA'
>>> random.randrange(0,10)
2
>>> random.randint(0,10)
7
>>> random.getrandbits(3)
7
>>> random.random()
0.3533718176197945
>>> random.uniform(3,5)
3.3321894552898152
난수 생성기의 시퀀스 처리 함수
1. random.choice(seq) : 비어있지 않은 seq에서 임의의 요소를 반환한다.
2. random.choices(population, k=n) : population에서 중복을 허락하며 길이가 k인 list를 반환한다.
3.. random.sample(population, k) : population에서 중복을 허락하지 않고 길이가 k인 list를 반환한다.
4. random.shuffle(seq) : seq를 섞습니다.
>>> import random
>>> a=[1,2,3,4,5,6,7,8,9,10]
>>> random.choice(a)
7
>>> random.choices(a,k=5)
[2, 10, 5, 7, 5]
>>> random.sample(a,5)
[9, 6, 5, 8, 3]
>>> random.shuffle(a)
>>> a
[7, 8, 4, 1, 3, 2, 9, 5, 6, 10]
* Python은 메르센 트위스터(Mersenne Twister)라는 난수 생성기를 사용한다. 이는 53비트의 정밀도와 2**19937-1의 주기를 가지는데(총각 그게 좋은 거유~?) 혹시나 자신만의 난수 생성기를 사용할 사람은 random클래스를 상속받아서 쓰라고 API에 쓰여있다.
* random모듈의 실수 반환 랜덤은 수학적인 radom함수를 다수 가지고 있다. 필자는 수학을 못해서 넘어갔지만, 공학도 분들께서는 gauss, expovariate, gammavariate, weibullvariate(아니 영어도 무슨 뜻인지 모르겠다.)등을 보고 사용하도록 하자
* 출처 : docs.python.org/ko/3/library/random.html
'm번모시았알을 d. 간 o 다이는 nr보 a아듈'
다음 시간은 다른 모듈 탐구 포스팅으로 여러분들을 찾아뵙겠다.
'Python > Python 모듈탐구' 카테고리의 다른 글
[Python] - 모듈탐구 os - Python으로 내 컴퓨터 조작하기 (0) | 2021.04.11 |
---|---|
[Python] - 모듈탐구 pickle - 자료구조의 저장과 불러오기 (0) | 2021.04.11 |
[Python] - 모듈탐구 copy - 뭐! 모듈이 복사가 된다고? (0) | 2021.04.11 |
[Python] - 모듈탐구 base64 - == = (0) | 2021.04.11 |
[Python] - 모듈탐구 time - Python 멈춰! (0) | 2021.04.11 |