DEV

Python3 - random

randomを試してみます。

下記をやってみます。100回randintを0~100まででやってみます。

import numpy as np
import random
import matplotlib.pyplot as plt
arr = np.zeros([100])
for _ in range(100):
a = random.randint(1, 100)
arr[a - 1] += 1
x = np.arange(0, 100, 1)
plt.plot(x, arr)
plt.savefig('./img/rand.jpg')

結果

10000回やってみます。

100000回やってみます。

100万回やってみます。

seed設定してみます。

random.seed(123)
print(random.random())
print(random.randint(0, 100))

何回やっても、下記でした。

0.052363598850944326
11
random.seed(123)
print(random.random())
print(random.randint(0, 100))
a = random.random()
print(a)
b = 0
cnt = 0
for i in range(5):
b = random.random()
if a != b:
cnt += 1
print(b)
print(cnt)
a = random.random()
print(a)
b = 0
cnt = 0
for i in range(5):
b = random.random()
if a != b:
cnt += 1
print(b)
print(cnt)

何回やっても下記でした。

0.052363598850944326
11
0.7689563885870707
0.26655381253138355
0.8385035164743577
0.8748257461052661
0.3791243324890884
0.5623187149479814
5
0.34079822787707015
0.05190165459858176
0.1350574593038607
0.5609620089366762
0.7016897890356433
0.16377684475236043
5

seedが同じだと、プログラムを実行する度に、まったく同じ数字が同じ順番ででてくる。

60%の確率で正解を出す機械をつくってみます。 random.random()が0.6以内だったら当たりにします。

per = 0.6
cnt = 5
results = np.zeros([100])
for i in range(100):
ok = 0
for _ in range(cnt):
if random.random() <= per: ok += 1
results[i] = ok / cnt
print(results)
print(results.mean())

結果

[ 0.2 0.6 0.8 0.8 0.6 0.4 0.8 0.6 1. 0.4 1. 0.4 0.8 0.6 0.4
0.8 0.6 0.6 0.6 1. 0.2 0.4 0.2 0.6 0.6 0.6 0.8 0.2 0.6 0.8
0.8 1. 0.6 0.6 0.4 0.4 0.4 0.6 0.6 0.8 1. 0.8 0.8 0.6 0.8
1. 0.4 0.6 0.6 0.8 0.8 0.6 0.8 1. 0.6 0.2 0.2 0.6 0.8 0.6
0.4 0.6 0.2 0.8 0.6 0.4 0.4 0.4 0.6 1. 0.4 0.8 0.4 0.6 0.6
0.6 0.4 0.4 0.6 0.6 0.8 0.4 0.6 0.2 0.6 0.6 0.8 0.8 0.6 0.4
1. 0.2 0.6 0.6 0.2 0.8 0.4 0.6 0. 0.6]
0.594