個人的なまとめ。

てきとーに何か書きます。

random.randintとrandom.randrange

Pythonのrandomライブラリには,int形の数値を返してくれるものにrandintとrandrangeがあります.

どっちも特に違いが分からないので,とりあえずそれっぽく調べてみました.

import csv
import random

f_range = open('../../range.csv','ab')
f_int = open('../../int.csv','ab')

csvWritterRange = csv.writer(f_range)
csvWritterInt = csv.writer(f_int)

val = 0
for i in range(200):
    rangedata = []
    val = random.randrange(-100,100)
    rangedata.append(val)

    csvWritterRange.writerow(rangedata)

f_range.close()

val = 0
for i in range(200):
    intdata = []
    val = random.randint(-100,100)
    intdata.append(val)

    csvWritterInt.writerow(intdata)

f_int.close()

とりあえず200回繰り返す感じで結果をcsvファイルに書き込む感じにしました.
それぞれ生成範囲は-100から100です.

random.randrange(-100,100)の結果
f:id:kosuke128:20171223165937p:plain

random.randint(-100,100)の結果
f:id:kosuke128:20171223165934p:plain


パッと見どっちも同じように見えます.
randrange
平均: -3.44
標準偏差: 56.840660

randint
平均: -0.295
標準偏差: 57.940837

どっちもほぼ一緒ですねーー.

まぁ,どっちを使ってもとりあえず同じような結果が得られるっぽいので,とりあえずは好きな方で良いんじゃないかと思います.

実行速度に関してはそのうちテストしてみようかなぁと.


2018/01/11追記
rangeを100万回にして再度標準偏差を調べてみた.
今回は標準偏差の計算にnumpyを用いる

import array
import numpy as np
import random


val_range = array.array('i')
val_int = array.array('i')
data = 0

# random.randrange
for i in range (1000000):
    data = random.randrange(-100, 100)
    val_range.extend([data])

std_range = np.std(val_range)
print(std_range)

# random.randint
data = 0
for i in range (1000000):
    data = random.randrange(-100, 100)
    val_int.extend([data])

std_int = np.std(val_int)
print(std_int)


結果は,
randrange ---> 57.7298113711
randint ---> 57.7393779226

余計差が無くなった感じですね.

結局,どっちでも良い気がします.