2009-05-03 4 views
6

한계 A, 모드 B 및 상한 C가있는 삼각형 확률 분포에서 생성 된 값을 매개 변수로 사용하는 시뮬레이션을 실행하고 싶습니다. 어떻게이 값을 파이썬에서 생성 할 수 있습니까? 이 배포판에 대한 expovariate (람다) (무작위로부터)와 같은 간단한 것이 있습니까, 아니면이 것을 코딩해야합니까?Python, SimPy : 삼각형 확률 분포에서 값을 생성하는 방법은 무엇입니까?

답변

6

NumPy 패키지를 다운로드하면 찾고자하는 것을 정확히 수행하는 numpy.random.triangular (left, mode, right [, size]) 함수가 있습니다.

4

나는이 놓친 내가 파이썬 2.4에서의 임의 문서를 확인하고, 이후 : 반환 ¶ 임의의 부동 소수점 수 (N) 등이 낮은 < = N을

random.triangular (저, 고, 모드)를 < = 높음이고 해당 범위 사이에 지정된 모드가 있습니다. 상한 및 하한은 기본적으로 0과 1입니다. 모드 인수의 기본값은 경계 사이의 중간 점이며 대칭 분포를 제공합니다. 버전 2.6의 새로운 기능.

+0

대부분의 사용 사례에서 허용되는 답변보다 나은 답변 일 수 있습니다. API가 NumPy와는 다른 순서를 갖는 것은 짜증나는 일입니다! –

2

배포판이 NumPy 또는 Python 표준 라이브러리에서 처리되지 않았다고 가정 해 보겠습니다.

성능이 그다지 중요하지 않은 상황에서 거절 샘플링은 자신이 가지고 있지 않은 배포판에서 가져 오는 데 유용한 해킹입니다. 당신의 삼각 분포를 들어

, 당신은 당신이 모든 것이 좋아 보인다 있는지 확인하려면 몇 가지 샘플

pylab.hist([random_triangular(1, 6, 5) for t in range(10000)]) 

을 플롯 할 수 있습니다

from random import random, uniform 

def random_triangular(low, high, mode): 
    while True: 
     proposal = uniform(low, high) 
     if proposal < mode: 
      acceptance_prob = (proposal - low)/(mode - low) 
     else: 
      acceptance_prob = (high - proposal)/(high - mode) 
     if random() < acceptance_prob: break 
    return proposal 

처럼 뭔가를 할 수 있습니다.

+0

좋은 범용 힌트! OP에있어서, 여기서의 아이디어는 균일 분포를 원하는 분포의 밀도와 연관시키는 것이다. –

관련 문제