Python 確率によって分岐する関数の作成

 例えば、コインの表(omote)と裏(ura)の出現確率は、通常50%である。しかし、コンピュータ上でその確率に差を設けることができる。下図は、omoteの確率を10%、uraの確率を90%に設定して、20回試行した結果である。明らかに、omoteの出現数が少ないことがわかる。これは、numpyの「np.random.choice」を使用することで容易にできる。ちなみに、確率なので20回試行しても、結果として全部uraがでることもありえます。

f:id:HK29:20211010204323p:plain

これを使ってif文で分岐することで、処理内容を変えることができる。本プログラムでは、omoteが出れば引数の値を100倍にし、uraが出れば引数の値を0として返す関数である。

■本プログラム

import numpy as np

def branch_bunc(val):
    # omote, uraを順に、10%,90%の確率で出力する
    myflag = np.random.choice(['omote', 'ura'], p=[0.1, 0.9])
    
    if myflag == 'omote': # omoteの場合、引数を100倍する
        val = val * 100
    else: # omoteでなかった場合、引数を0にする
        val = 0
    
    return myflag, val

for i in range(1, 21, 1):
    print(i, branch_bunc(1))

以上

<広告>