少し油断をすると一気に間が開いてしまう。
なんとか、通常運行に戻さなければ!ということで、Chapter4に突入です。
Chapter3の演習問題で頭を抱えてしまった部分があったため、時間がかかりました。
※問題の答えに自信がもてない時に答え合わせが出来ないのは少々辛いであります。いい方法を知っている人は教えてくださいませ・・・
確率のお勉強
確率や集合に関する知識が問われるわけだが、正直全くと言って自信がない。
A ∩ B や A ∪ B
なんて、なんだったっけ。。って感じだった。Uみたいなやつが"または"だね。Unionと覚えればわかりそうだ。尤度とか全く覚えていないけれど。
練習問題1
コインの確率を求める問題。
これ自体は、先に出て来ている内容とほぼほぼ同じなので特に問題なし
coin = np.array([0, 1])
random.seed(0)
tos_count = 1000
coin_result = random.choice(coin, tos_count)
print("0が出る確率", len(coin_result[coin_result==0])/tos_count)
print("1が出る確率", len(coin_result[coin_result==1])/tos_count)
練習問題2
くじ引きの問題を考えます。1000本のくじの中に、100本のあたりがあるとします。AくんとBくんが順にくじを引き、AくんとBくんともにあたりを引く確率を求めてください。ただし、引いたくじは戻さないとして、それぞれ1回のみ引きます。(これは手計算でも大丈夫です。)
うーん、ひいたくじは戻さないということは、確率は常に変化し続けるということなのか。
とりあえず組んでみた
np.random.seed(0)
# 0を外れ、1をあたりとして配列を作成する
lott = np.array([0]*900+[1]*100)
result = np.array([])
while len(lott) >= 2:
# くじ引き
# あたりの場合は後ろから要素を削除。外れの場合は前から要素を削除
result_a = np.random.choice(lott, 1)
if result_a == 1:
lott = np.delete(lott, len(lott)-1)
else:
lott = np.delete(lott, 0)
result_b = np.random.choice(lott, 1)
if result_b == 1:
lott = np.delete(lott, len(lott)-1)
else:
lott = np.delete(lott, 0)
# 二人ともあたりの場合はresultに1を追加。それ以外は0を追加
if result_a == 1 and result_b == 1:
result = np.append(result, 1)
else:
result = np.append(result, 0)
print("AとBがあたりが出る確率", len(result[result==1])/len(result))
結果からすると、多分間違ってはいないんだろうけれど、解き方としては間違っている気がする。
なんか、もう少しうまくエレガントな方法があるに違いないんだけれど、とりあえずPythonに慣れるという意味では解いた。
模範解答が欲しいです。。。