문제
Excel (또는 OpenOffice Calc)에서 Poisson 함수를 사용하면 두 가지 인수가 필요합니다.
- 정수
- '평균'숫자
플로트를 반환합니다.
Python (RandomArray와 Numpy를 시도했습니다)에서 임의의 Poisson 번호 배열을 반환합니다. 내가 정말로 원하는 것은이 이벤트가 발생할 백분율입니다 (상수 숫자이며 배열은 매번 다른 숫자를 갖습니다. 평균입니까?).
예를 들어:
print poisson(2.6,6)
보고 [1 3 3 0 1 3]
(그리고 내가 실행할 때마다 다릅니다).
Calc/Excel에서 얻은 숫자는 3.19입니다.POISSON(6,2.16,0)*100
).
나는 파이썬의 포아송을 잘못 사용하고 있습니까 (말장난!), 아니면 뭔가 빠졌습니까?
해결책
손으로 쉽게 할 수 있지만 그렇게하는 방식으로 오버플로 할 수 있습니다. 오버플로를 피하기 위해 지수와 계승을 루프로 수행 할 수 있습니다.
def poisson_probability(actual, mean):
# naive: math.exp(-mean) * mean**actual / factorial(actual)
# iterative, to keep the components from getting too large or small:
p = math.exp(-mean)
for i in xrange(actual):
p *= mean
p /= i+1
return p
다른 팁
scipy
당신이 원하는 것을 가지고 있습니다
>>> scipy.stats.distributions
<module 'scipy.stats.distributions' from '/home/coventry/lib/python2.5/site-packages/scipy/stats/distributions.pyc'>
>>> scipy.stats.distributions.poisson.pmf(6, 2.6)
array(0.031867055625524499)
손으로 계산하기가 매우 쉽다는 점은 주목할 가치가 있습니다. ~도.
이 페이지 배열을 얻는 이유와 적어도 숫자의 의미를 설명합니다.
제휴하지 않습니다 StackOverflow