Random Generator は NumPy version 1.17.0 から利用できるようになった乱数生成の機能です.Legacy な numpy.random も引き続き利用可能ですが,Random Generator の方が乱数生成処理を高速に行うことが可能です.大量のデータ処理で乱数を多く利用するような場合には速度面やメモリの使用量などで有利になるはずです.
具体的には,np.random.default_rng
で乱数生成器のインスタンスを生成して,そのインスタンスに対して乱数を生成するメソッドを使います.このとき得られる乱数は毎回異なるはずです.例えば2回実行してみます.
import numpy as np
rng = np.random.default_rng()
vals = rng.standard_normal(10)
vals
array([ 1.35734067, 0.14443111, 1.10362741, -0.05386298, -0.68688568, 2.70627428, 0.11651781, 0.04729414, -0.68068794, 0.15880024])
array([ 1.61149222, 0.13733537, -1.24372743, -0.16351334, 1.03756876, -0.43434218, -0.14113534, -0.01825277, 0.83074113, -0.40989553])
なお,from numpy.random import default_rng
のように読み込んでおけば,単に default_rng()
として乱数生成器のインスタンスを生成できます.
import numpy as np
from numpy.random import default_rng
rng = default_rng()
vals = rng.standard_normal(10)
vals
array([ 0.81825096, 1.96979102, -1.30487463, 0.9490621 , 0.70762619, 0.3430075 , -0.07748837, 0.50336707, 0.09696886, -0.22225245])
乱数生成に再現性を持たせたい場合は,from numpy.random import default_rng
に任意の引数を与えます.例えば引数に 1
を与えた場合は,何度実行しても同じ乱数列が得られるはずです.
rng = np.random.default_rng(1)
rng.random(10)
array([0.51182162, 0.9504637 , 0.14415961, 0.94864945, 0.31183145, 0.42332645, 0.82770259, 0.40919914, 0.54959369, 0.02755911])
array([0.51182162, 0.9504637 , 0.14415961, 0.94864945, 0.31183145, 0.42332645, 0.82770259, 0.40919914, 0.54959369, 0.02755911])
array([0.51182162, 0.9504637 , 0.14415961, 0.94864945, 0.31183145, 0.42332645, 0.82770259, 0.40919914, 0.54959369, 0.02755911])
また,乱数生成器の初期化で seed=123
のように記述することも可能です.
rng = np.random.default_rng(seed=123)
rng.random(10)
array([0.68235186, 0.05382102, 0.22035987, 0.18437181, 0.1759059 , 0.81209451, 0.923345 , 0.2765744 , 0.81975456, 0.88989269])