NumPy, randomで様々な種類の乱数の配列を生成

numpy.randomモジュールに、乱数に関するたくさんの関数が提供されています。

Random sampling (numpy.random) — NumPy v1.12 Manual

ここでは、

一様分布の乱数生成 numpy.random.rand(): 0.0以上、1.0未満 numpy.random.random_sample(): 0.0以上、1.0未満 numpy.random.randint(): 任意の範囲の整数

正規分布の乱数生成 numpy.random.randn(): 平均0、分散1(標準偏差1) numpy.random.normal(): 任意の平均、標準偏差

二項分布の乱数生成 numpy.random.binomial()

ベータ分布の乱数生成 numpy.random.beta()

ガンマ分布の乱数生成 numpy.random.gamma()

カイ二乗分布の乱数 numpy.random.chisquare()

について、サンプルコードとともに説明します。 Pythonの標準ライブラリに含まれているrandomモジュールを使った乱数の生成については以下の記事を参照。

乱数シードの固定にはnumpy.random.seed()を使います。

numpy.random.seed — NumPy v1.12 Manual

numpy.random.rand(): 一様分布(0.0以上、1.0未満)

np.random.rand()は[0.0, 1.0)(0.0以上、1.0未満)の乱数を返す。 引数としてサイズを整数d0, d1, ... , dnで渡す。

import numpy as np

rand = np.random.rand()  # 一つの乱数
print(rand)
# 0.5399711080561779

arr = np.random.rand(3)  # サイズが3の配列の乱数
print(arr)
# [ 0.22393312  0.56723404  0.41167989]

arr = np.random.rand(4, 4)  # 4 x 4の配列の乱数
print(arr)
# [[ 0.98109413  0.43272792  0.78808567  0.14697466]
#  [ 0.14529422  0.66417579  0.62020433  0.39887021]
#  [ 0.78762131  0.3616854   0.76995665  0.25530529]
#  [ 0.59426681  0.64130992  0.41451061  0.2356074 ]]

arr = np.random.rand(3, 2, 2)  # 3 x 2 x 2の配列の乱数
print(arr)
# [[[ 0.26072665  0.63424568]
#   [ 0.43025675  0.88787556]]
#
#  [[ 0.58189813  0.57733422]
#   [ 0.4312518   0.12558879]]
#
#  [[ 0.58588003  0.58290714]
#   [ 0.58133023  0.05894161]]]

0.0以上、1.0未満ではなく、任意の範囲([a, b): a以上、b未満)の乱数を取得したい場合は、以下のようにします。 (b - a) * np.random.rand() + a

numpy.random.random_sample(): 一様分布(0.0以上、1.0未満)

np.random.random_sample()もnp.random.rand()と同じく、[0.0, 1.0)(0.0以上、1.0未満)の乱数を返す。 np.random.rand()との違いはサイズの指定方法。 np.random.random_sample()ではサイズをタプル(d0, d1, ... , dn)(一次元の場合は整数)で渡す。 rand = np.random.random_sample() # 一つの乱数

print(rand)
# 0.7812294650415362

arr = np.random.random_sample(3)  # サイズが3の配列の乱数
print(arr)
# [ 0.31315625  0.75406842  0.51955327]

arr = np.random.random_sample((4, 4))  # 4 x 4の配列の乱数
print(arr)
# [[ 0.17710988  0.63316992  0.00101942  0.94233375]
#  [ 0.9439738   0.58700846  0.97807038  0.56899597]
#  [ 0.62050185  0.23601975  0.57513176  0.56947325]
#  [ 0.64393715  0.92796497  0.83784537  0.1544701 ]]

arr = np.random.random_sample((3, 2, 2))  # 3 x 2 x 2の配列の乱数
print(arr)
# [[[ 0.26624554  0.33096779]
#   [ 0.1814989   0.12867246]]
#
#  [[ 0.1435755   0.45274324]
#   [ 0.12867198  0.98908694]]
#
#  [[ 0.86989893  0.67003622]
#   [ 0.17530006  0.03146698]]]

print(np.random.random_sample is np.random.random)
# True => np.random.random_sampleとnp.random.randomは同一

そのほか、

np.random.random()
np.random.ranf()
np.random.sample()

はすべて、np.random.random_sample()の別名(エイリアス)で、機能は全く同じ。 numpyのソースコード参照。

# Some aliases:
ranf = random = sample = random_sample
__all__.extend(['ranf', 'random', 'sample'])

numpy.random.randint(): 一様分布(任意の範囲の整数)

np.random.randint()は任意の範囲の整数の乱数を返す。 引数として最小値、最大値、サイズ、および、型を渡す。サイズはタプル。 最小値以上、最大値未満の範囲の整数の乱数を返す。

numpy.random.randint(low, high=None, size=None, dtype='l')
numpy.random.randint — NumPy v1.12 Manual

arr = np.random.randint(4, 10, (3, 3))  # 4以上10未満の3 x 3の配列の整数乱数
print(arr)
# [[9 5 6]
#  [4 8 9]
#  [9 8 5]]

numpy.random.randn(): 標準正規分布(平均0、分散1)

np.random.randn()は、平均0、分散1(標準偏差1)の正規分布(標準正規分布)に従う乱数を返す。 サイズを整数d0, d1, ... , dnで渡す。

arr = np.random.randn(3, 3)
print(arr)
# [[-0.25630308  0.86118703  0.7163906 ]
#  [-0.63096426 -2.09983061  1.28259567]
#  [ 1.45971205  0.2939326   0.64207751]]

サイズをタプルで指定するnp.random.standard_normal()もあります。

numpy.random.standard_normal — NumPy v1.12 Manual

numpy.random.normal(): 正規分布(任意の平均、標準偏差)

np.random.normal()は、平均loc、標準偏差scaleの正規分布に従う乱数を返す。 サイズをタプル(d0, d1, ... , dn)(一次元の場合は整数)で渡す。

numpy.random.normal(loc=0.0, scale=1.0, size=None)
numpy.random.normal — NumPy v1.12 Manual

arr = np.random.normal(-2, 0.5, (3, 3))
print(arr)
# [[-2.40461812 -2.76365861 -1.70312821]
#  [-2.29453302 -1.53210319 -1.49669024]
#  [-1.90580765 -1.45375908 -2.44137036]]

numpy.random.binomial(): 二項分布

np.random.binomial()は、パラメータn, pの二項分布に従う乱数を返す。 サイズをタプル(d0, d1, ... , dn)(一次元の場合は整数)で渡す。

二項分布 - Wikipedia

arr = np.random.binomial(10, 0.5, 10)
print(arr)
# [7 4 7 5 7 8 5 5 3 4]

numpy.random.beta(): ベータ分布

np.random.beta()は、パラメータa, bのベータ分布に従う乱数を返す。 サイズをタプル(d0, d1, ... , dn)(一次元の場合は整数)で渡す。

ベータ分布 - Wikipedia

arr = np.random.beta(2, 2, 10)
print(arr)
# [ 0.36516508  0.86746749  0.54430968  0.31152791  0.57359928  0.48281988
#   0.70518635  0.57312808  0.09019818  0.87831173]

numpy.random.gamma(): ガンマ分布

np.random.gamma()は、形状母数shape、尺度母数scaleのガンマ分布に従う乱数を返す。 サイズをタプル(d0, d1, ... , dn)(一次元の場合は整数)で渡す。

ガンマ分布 - Wikipedia

arr = np.random.gamma(5, 1, 10)
print(arr)
# [ 3.86630062  1.69144819  3.07071675  3.14181626  3.61405871  8.37772201
#   5.47063142  4.80523142  3.68531649  4.43143731]

numpy.random.chisquare(): カイ二乗分布

np.random.chisquare()は、自由度dfのカイ二乗分布に従う乱数を返す。 サイズをタプル(d0, d1, ... , dn)(一次元の場合は整数)で渡す。

カイ二乗分布 - Wikipedia

arr = np.random.chisquare(3, 10)
print(arr)
# [ 0.49617849  2.39966829  2.84359974  3.5340327   0.71761612  2.04619564
#   0.35930769  4.00448281  1.2907048   2.99259386]

シェア

関連カテゴリー

Python NumPy

NumPyで空の配列ndarrayを生成するemptyとempty_like NumPy配列ndarrayをバイナリファイル(npy, npz)で保存 NumPy配列ndarrayの条件を満たす要素数をカウント Python, NumPyでグラデーション画像を生成 NumPy配列ndarrayを分割(split, array_split, hsplit, vsplit, dsplit) NumPyのデータ型dtype一覧とastypeによる変換(キャスト) Pythonでの画像処理、Pillow, NumPy, OpenCVの違いと使い分け Pythonで正規化・標準化(リスト、NumPy配列、pandas.DataFrame) NumPy配列ndarrayに新たな次元を追加するnp.newaxis NumPy配列ndarrayの行・列を任意の順番に並べ替え、選択(抽出) NumPy配列ndarrayをイミュータブル(書き換え禁止)に設定 NumPy配列ndarrayをシフト(スクロール)させるnp.roll NumPyのバージョンを確認(np.version) NumPyで欠損値np.nanを含む配列ndarrayの合計や平均を算出 『Pythonデータサイエンスハンドブック』は良書(NumPy, pandasほか)

Last Updated: 6/26/2019, 10:34:03 PM