問題になったこと
import random
のrandom.randint(MIN, MAX)
は、MIN以上、MAX以下
を返すが、
numpy
のnp.random.randint(MIN, MAX)
は、MIN以上、MAX未満
の値を返す。
MAXを含むかどうかだけの違いだが、使い所によっては致命的になることがある。(あった)
仕様上の違い
通常のrandint
https://docs.python.org/ja/3/library/random.html
random.randint(a,b)
a<=N<=bであるようなランダムな整数Nを返します。randrange(a,b+1)のエイリアスです。
npのrandint
https://numpy.org/doc/stable/reference/random/generated/numpy.random.randint.html
https://note.nkmk.me/python-numpy-random/
np.random.randint()は任意の範囲の整数の乱数を返す。
引数として最小値、最大値、サイズ、および、型を渡す。サイズはタプル。
最小値以上、最大値未満の範囲の整数の乱数を返す。
実動作上の違い
簡易的な検証用コード
import random
import numpy as np
print("--- random.randint(0,1)")
for i in range (20):
print (random.randint(0,1))
print("--- np.random.randint(0,1)")
for j in range (20):
print (np.random.randint(0,1))
確かにrandom.randint(0,1)
は0 or 1を返しているが、
np.random.randint(0,1)
は0しか返さない。
$ python3 test.py
--- random.randint(0,1)
0
0
0
0
1
1
0
1
1
1
1
0
0
0
0
1
0
1
0
0
--- np.random.randint(0,1)
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
他にハマってる人いないのか?
ちょいちょいおられますね、、
結構間違え易いみたいなのでご注意下さい。。
numpyのrandintとrandomのrandintは違う
NumpyのrandintとRandomのrandintの違い
random.randint(a,b) と np.random.randint(a,b) を入れ替えると分析結果が正反対になってしまった!