edo1z blog

プログラミングなどに関するブログです

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