2008-11-11 61 views
16

Khi bạn sử dụng chức năng POISSON trong Excel (hoặc trong OpenOffice Calc), phải mất hai đối số:Tính Poisson khả năng tỷ lệ

  • một số nguyên
  • một 'trung bình' số

và trả về một phao.

Trong Python (Tôi đã thử RandomArray và NumPy), nó trả về một mảng các số poisson ngẫu nhiên. Điều tôi thực sự muốn là tỷ lệ phần trăm mà sự kiện này sẽ xảy ra (nó là một số không đổi và mảng có mọi số thời gian khác nhau - sao cho nó là trung bình?).

ví dụ:

print poisson(2.6,6) 

lợi nhuận [1 3 3 0 1 3] (và mỗi khi tôi chạy nó, nó khác nhau).

Số tôi nhận được từ calc/excel là 3,19 (POISSON(6,2.16,0)*100).

Tôi có sử dụng sai số của python không (không có chữ!) Hoặc tôi có thiếu gì đó không?

Trả lời

13

Thật dễ dàng để làm bằng tay, nhưng bạn có thể tràn làm theo cách đó. Bạn có thể làm số mũ và thừa trong một vòng lặp để tránh tràn:

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 
1

This page giải thích lý do bạn nhận được mảng và ý nghĩa của các con số trong đó, ít nhất.

23

scipy có những gì bạn muốn

>>> 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) 

Nó đáng chú ý là nó khá dễ dàng để tính toán bằng tay, too.

+1

Alternative nhập khẩu sẽ là: 'từ scipy.stats nhập poisson' sau đó 'poisson.pmf (6, 2,6)' = ,031867055625524499 – Jarad

Các vấn đề liên quan