Python入門トップページ


目次

  1. NumPy とは
  2. Python リストの場合
  3. NumPy の使用例
  4. NumPy で線形代数
  5. NumPy の乱数生成
    1. NumPy の乱数生成 (Random Generator)
    2. 実数分布
    3. 整数分布
    4. シーケンス用の関数
    5. Legacy な乱数生成 (numpy.random)

NumPy

NumPy の乱数生成

目次に戻る

NumPy の乱数生成 (Random Generator)

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])

目次に戻る