「Python3」NumPy(numpy.randamランダム関数)

NumPy NumPy

内部状態の保持と設定

get_state() ジェネレーターの内部状態を表すタプルを返す
set_state(state) タプルからジェネレーターの内部状態を設定する
seed(self, seed) 再シードする

単純なランダム

ランダム関数 説明
rand() 0~1のランダムな値を返す
randn() 標準正規分布からランダムな値を返す
random_sample(size) 0~1のランダムな値を返す
randint(low, high, size) low以上high-1以下のランダムな値を返す
choice(a, size, replace) 指定された1次元配列からランダムなサンプルを生成する

random.rand()

0.0~1.0のランダムな値を返します。

<ソースコード>
arr = np.random.rand(3, 2)
pprint.pprint(arr)
<出力結果>
array([[0.5488135 , 0.71518937],
       [0.60276338, 0.54488318],
       [0.4236548 , 0.64589411]])

random.randn()

標準正規分布からランダムな値を返します。

<ソースコード>
arr = np.random.randn(3, 2)
pprint.pprint(arr)
<出力結果>
array([[ 0.95008842, -0.15135721],
       [-0.10321885,  0.4105985 ],
       [ 0.14404357,  1.45427351]])

random.random_sample(size)

random.rand()関数と同様に0.0~1.0のランダムな値を返します。
random.rand()関数の違いは、配列サイズの指定方法です。

<ソースコード>
arr = np.random.random_sample(size=[3,5])
pprint.pprint(arr)
<出力結果>
array([[0.56804456, 0.92559664, 0.07103606, 0.0871293 , 0.0202184 ],
       [0.83261985, 0.77815675, 0.87001215, 0.97861834, 0.79915856],
       [0.46147936, 0.78052918, 0.11827443, 0.63992102, 0.14335329]])

random.randint(low, high, size)

low以上high-1以下のランダムな値を返します。

<ソースコード>
arr = np.random.randint(low=0, high=100, size=[3,5])
pprint.pprint(arr)
<出力結果>
array([[32, 31, 74, 23, 35],
       [75, 55, 28, 34,  0],
       [ 0, 36, 53,  5, 38]])

random.choice(a, size, replace)

指定された1次元配列からランダムなサンプルを生成します。

<ソースコード>
l = ["windows", "linux", "mac", "android"]
pprint.pprint(np.random.choice(l, size=2, replace=False))
<出力結果>
array(['mac', 'linux'], dtype='<U7')

順列をシャッフル

ランダム関数 説明
shuffle(x) 要素をシャッフルして、シーケンス自体を変更する
多次元配列は、最初の軸に沿ってのみシャッフルする
permutation(x) コピーを作成し、要素をランダムにシャッフル
多次元配列は、最初の軸に沿ってのみシャッフル

random.shuffle(x)

要素をシャッフルして、シーケンス自体を変更します。
多次元配列は、最初の軸に沿ってのみシャッフルします。

<ソースコード>
l = ["windows", "linux", "mac", "android"]
np.random.shuffle(l)
pprint.pprint(l)

l = np.arange(9).reshape(3,3)
np.random.shuffle(l)
pprint.pprint(l)
<出力結果>
['windows', 'linux', 'mac', 'android']
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

random.permutation(x)

コピーを作成し、要素をランダムにシャッフルします。
多次元配列は、最初の軸に沿ってのみシャッフルします。

<ソースコード>
l1 = ["windows", "linux", "mac", "android"]
l2 = np.random.permutation(l1)
pprint.pprint(l1)
pprint.pprint(l2)

l = np.arange(9).reshape(3,3)
l = np.random.permutation(l)
pprint.pprint(l)
<出力結果>
['windows', 'linux', 'mac', 'android']
array(['android', 'mac', 'linux', 'windows'], dtype='<U7')
array([[6, 7, 8],
       [3, 4, 5],
       [0, 1, 2]])

ランダム分布

numpy.randomには、乱数を生成するための様々な種類の分布関数が用意されています。用意されている分布関数を次の表にまとめます。

ランダム関数 説明
beta(a, b, size) ベータ分布
binomial(n, p, size) 二項分布
chisquare(df, size) カイ二乗分布
dirichlet(alpha, size) ディリクレ分布
exponential(scale, size) 指数分布
f(dfnum, dfden, size) F分布
gamma(shape, scale, size) ガンマ分布
geometric(p, size) 幾何分布
gumbel(loc, scale, size) Gumbel分布
hypergeometric(ngood, nbad, nsample, size) 超幾何分布
laplace(loc, scale, size) ラプラス分布(二重指数分布)
logistic(loc, scale, size) ロジスティック分布
lognormal(mean, sigma, size) 対数正規分布
logseries(p, size) 対数級数分布
multinomial(n, pvals, size) 他行分布
multivariate_normal(mean, cov, size, …) 多変量正規分布
negative_binomial(n, p, size) 負の二項分布
noncentral_chisquare(df, nonc, size) 非心カイ二乗分布
noncentral_f(dfnum, dfden, nonc, size) 非心F分布
normal(loc, scale, size) 正規(ガウス)分布
pareto(a, size) Lomax分布
poisson(lam, size) ポアソン分布
power(a, size) 正の指数a-1のパワー分布
rayleigh(scale, size) レイリー分布
standard_cauchy(size) 標準コーシー分布
standard_exponential(size) 標準指数分布
standard_gamma(shape, size) 標準ガンマ分布
standard_normal(size) 標準正規分布(平均= 0、標準偏差= 1)
standard_t(df, size) 標準スチューデントのt分布
triangular(left, mode, right, size) 三角分布
uniform(low, high, size) 均一な分布
vonmises(mu, kappa, size) フォンミーゼス分布
wald(mean, scale, size) Wald分布(逆ガウス分布)
weibull(a, size) ワイブル分布
zipf(a, size) Zipf分布

実際に分布関数を使用してみます。

ベータ分布:beta(a, b, size)

<ソースコード>
pprint.pprint(np.random.beta(a=2, b=3, size=[4,3]))
<出力結果>
array([[0.49776571, 0.55567337, 0.44495205],
       [0.37919465, 0.20576653, 0.28429628],
       [0.34411679, 0.39165377, 0.61127593],
       [0.27794046, 0.3111755 , 0.41580828]])

二項分布:binomial(n, p, size)

<ソースコード>
pprint.pprint(np.random.binomial(n=100, p=0.8, size=[4,3]))
<出力結果>
array([[80, 80, 75],
       [86, 78, 73],
       [80, 84, 80],
       [81, 81, 82]])

ラプラス分布:laplace(loc, scale, size)

<ソースコード>
pprint.pprint(np.random.laplace(loc=0, scale=3, size=[4,3]))
<出力結果>
array([[ 2.04801395,  7.91984118,  0.73154263],
       [ 1.23765982, -5.7744356 ,  0.35655873],
       [ 1.78821057,  0.73473963, -0.05227446],
       [-3.3958288 ,  0.86621124,  1.93204839]])

正規分布:normal(loc, scale, size)

<ソースコード>
pprint.pprint(np.random.normal(loc=0, scale=3, size=[4,3]))
<出力結果>
array([[ 0.37630997, -1.56277543, -2.95830145],
       [ 0.21452622, -0.8589891 ,  4.748908  ],
       [-3.43559994,  0.93468989,  0.05452997],
       [ 2.2788399 ,  4.05659236,  0.83058303]])

ポアソン分布:poisson(lam, size)

<ソースコード>
pprint.pprint(np.random.poisson(lam=3, size=[4,3]))
<出力結果>
array([[2, 5, 2],
       [2, 1, 5],
       [2, 2, 2],
       [0, 0, 3]])

コメント

タイトルとURLをコピーしました