Python入門トップページ


目次

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

NumPy

NumPy の乱数生成

整数分布

目次に戻る

一様分布

整数の一様乱数を生成するには rng.integers(low, high=None, size=None) を使います.

例えば,次の例では0以上10未満(つまり最大9)の乱数を1個生成します.

import numpy as np
rng = np.random.default_rng()
rng.integers(10)
2

10以上20未満(最大19)の乱数を1個生成するには次のように記述します.

# 10 以上,20未満の整数の一様乱数
rng.integers(10, 20)
19

10以上20未満(最大19)の乱数を100個生成するには次のように記述します.

rng.integers(10, 20, 100)
array([14, 13, 17, 17, 10, 19, 19, 10, 12, 15, 16, 19, 18, 13, 16, 17, 19,
       12, 14, 15, 10, 13, 15, 12, 17, 14, 18, 15, 10, 13, 14, 15, 16, 12,
       16, 11, 14, 18, 11, 13, 10, 16, 19, 10, 10, 15, 11, 17, 16, 18, 15,
       10, 17, 18, 13, 13, 19, 18, 12, 13, 19, 11, 12, 10, 14, 19, 14, 11,
       18, 11, 15, 14, 17, 18, 15, 19, 19, 10, 14, 19, 12, 12, 11, 17, 11,
       12, 14, 17, 17, 10, 13, 16, 16, 19, 17, 18, 12, 10, 19, 17])

また 01一様乱数を100個生成するとき,size=100のように記述することも可能です.

rng.integers(0, 2, size=100)
array([1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,
       0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1,
       1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1,
       0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0,
       1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1])

行列形式で乱数を取得することも可能です.例えば5行4列で取得してみます.

rng.integers(0, 2, size=(5,4))
array([[1, 1, 1, 0],
       [0, 1, 1, 0],
       [0, 1, 0, 1],
       [0, 1, 1, 1],
       [0, 1, 0, 0]])

10以上20未満(最大19)の乱数を100個生成して,ヒストグラムを描いてみます.

x = rng.integers(10, 20, 100)

# ヒストグラムを描く
fig, ax = plt.subplots(1, 1, figsize=(6, 4))
ax.hist(x, bins=10)
# plt.savefig('rng-integers.png', dpi=300, facecolor='white')
plt.show()
rng-integers

目次に戻る

ポアソン分布

ポアソン分布に従う乱数を発生させるには,rng.poisson(lam=1.0, size=None) を使います.なお,引数の lam=1.0 は平均値です.

たとえば平均2のポアソン分布に従う乱数を20個生成してみます.

import numpy as np
rng = np.random.default_rng()

lam = 2  # 平均
rng.poisson(lam, 20)
array([2, 2, 2, 0, 1, 1, 0, 1, 3, 4, 2, 2, 1, 0, 2, 1, 1, 1, 2, 2])

平均2のポアソン乱数を1000個発生させてヒストグラムを描いてみます.

import matplotlib.pyplot as plt
from IPython.display import set_matplotlib_formats
# from matplotlib_inline.backend_inline import set_matplotlib_formats # バージョンによってはこちらを有効に
set_matplotlib_formats('retina')

lam = 2  # 平均
rng = np.random.default_rng()
x = rng.poisson(lam, 1000)

# ヒストグラムを描く
fig, ax = plt.subplots(1, 1, figsize=(6, 4))
ax.hist(x)
# plt.savefig('rng-poisson.png', dpi=300, facecolor='white')
plt.show()
rng-poisson

目次に戻る