본문 바로가기

Python

Random

Random


랜덤. 오.. 랜덤...



기본


기본적으로 많이 사용되는 랜덤 명령들 예시

매개변수(parameter)의 순서대로 p1,p2,p3... 으로 표기했다



import random

# 실수형
random.random() # 랜덤 실수 0.0 <= x < 1.0
random.uniform(1, 10) # 랜덤 실수 p1 <= x < p2


# 정수형
random.randrange(10) # 랜덤 정수 0 <= x < p
random.randrange(0, 101, 2) # 간격을 가지는 랜덤 정수 p1 <= x (, p3간격) < p2
random.randint(0, 10) # 랜덤 정수 p1 <= x <= p2


# 바이트형
bytearray((random.getrandbits(8) for i in range(100))) # range의 매개변수 만큼 랜덤 바이트 배열 생성


# 자료구조 활용형
random.choice('abcdefghij') # 임의의 요소 선택
random.shuffle([1, 2, 3, 4, 5, 6, 7]) # p를 섞는다
random.sample([1, 2, 3, 4, 5], 3) # p1의 자료들에서 p2개의 샘플을 뽑는다


당연한 이야기지만 보안과 관련된 개발에서는 이 기본 랜덤 제너레이터를 사용하면 안된다

보안과 관련된 개발에서 난수가 필요할 경우 os.urandom()을 사용하자




심화


일반적인 경우, 범위 안의 랜덤 값들의 등장 빈도가 같다고 할 수 있다[각주:1]. 즉, 고르게(uniform) 분포(distribution)된다는 것.

하지만 때때로 특정 분포를 따라 랜덤값이 나오게 하고 싶을 경우가 있다, 이럴 때 사용하면 좋은 함수들 예시



import random

# p3를 중심점으로 하는 삼각분포 랜덤 랜덤 실수 p1 <= x <= p2
# https://en.wikipedia.org/wiki/Triangular_distribution
random.triangular(p1, p2, p3)

# alpha, beta값을 사용해 베타 분포되는 랜덤 실수 0 <= x <= 1
# https://en.wikipedia.org/wiki/Beta_distribution
random.betavariate(alpha, beta)

# p1을 람다 값으로 사용한 지수분포 랜덤 실수. p1이 양수일 경우 0 <= x <= inf 음수일 경우 inf <= x <= 0
# https://ko.wikipedia.org/wiki/%EC%A7%80%EC%88%98%EB%B6%84%ED%8F%AC
random.expovariate(p1)

# p1을 변수평균, p2를 표준편차를 사용한 정규분포 랜덤 실수. 특히 p1=0 p2=1일 경우 표준정규분포를 따른다
# https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C%EB%B6%84%ED%8F%AC
random.gauss(p1, p2) # random.normalvariate()보다 살짝 빠르다는 장점이 있다


이상이다

  1. 물론 정말 모두 다 완전히 같은 빈도로 등장하는 것은 아님에 유의! [본문으로]

'Python' 카테고리의 다른 글

python multiprocessing AttributeError  (0) 2016.02.08
os.path 사용하기  (0) 2016.01.13
메일 발송  (0) 2015.12.08
IP확인  (0) 2015.12.08
Python Time  (0) 2015.11.17