0

そこで、超幾何分布計算機(確率と統計)を作成することにしました。問題は、出力が常に0から1の間にあることです。したがって、Pythonは、出力値に応じて0または1に切り捨てます。

これが私のコードです

from combinatorics import combination
from combinatorics import permutation
from factorial import factorial
from decimal import Decimal

#Hypergeometric and Binomial Distributions!



def hypergeometric(N, n, r, k):
    hyper = (combination(r, k) * combination(N - r, n - k))/(combination(N, n))
    return hyper

pop = int(raw_input("What is the size of the population? "))
draws = int(raw_input("How many draws were there? "))
spop = int(raw_input("What is the smaller population? "))
success = int(raw_input("How many successes were there? "))

print Decimal(hypergeometric(pop, draws, spop, success))

10進モジュールをインポートしようとしましたが、正しく使用しているかどうか、またはそれが目的であるかどうかさえわかりません。どんな助けでも素晴らしいでしょう!

編集:例として、N = 15、n = 6、r = 5、およびk = 3に設定すると、答えは0に丸められます。代わりに、適切な答えを出力したいと思います:.2397802398。ありがとう!

4

1 に答える 1

3

除算が整数ではなく浮動小数点数を返すことを確認してください(すべての入力変数は整数であるため)。

def hypergeometric(N, n, r, k):
    return 1.0 * combination(r, k) * combination(N - r, n - k) / combination(N, n)

代替案:Python <3を使用していると仮定します(そうでない場合、この問題はそもそも発生しませんでした)。その後、あなたはすることができます

from __future__ import division

これは/浮動除算を行いますが、//整数が指定されている場合は整数を返します。これをソースファイルの先頭に置くだけimportで、他のコードを変更する必要はありません。

于 2012-01-10T00:23:28.277 に答える