Pythonで乱数を発生させる方法【random, numpy, pytorchの差異に注意】
Pythonで乱数を発生させるには標準ライブラリのrandom
を利用しますが、numpy
やpytorch
を使う場合は、ライブラリ側でも乱数発生の関数が用意されており、そちらを利用することが多いです。この記事では、それぞれのライブラリでの乱数発生方法について解説します。random, numpy, pytorch
で微妙な違いがありますが、それについても触れています。
random
seed設定
乱数のシードは以下のように設定します
import random
x = random.seed(42)
一様乱数
0<=x<1.0の乱数を生成するにはrandom
を使います
import random
# 0.0以上1.0未満の乱数を生成
x = random.random()
正規分布
平均(mu
)、偏差(sigma
)の乱数を生成するにはgauss
を使います
import random
# 正規分布の乱数を生成
x = random.gauss(mu=0.0, sigma=1.0)
整数乱数
整数の乱数を発生させる場合は、randint(a,b)
の形で範囲を指定します。生成されるのはa<=x<=bの乱数です(区間[a, b])
import random
# 整数の乱数を作成 0 <= x <= 10
x = random.randint(0, 10)
複数個の乱数を生成したい場合
random
パッケージでは、複数の乱数を生成することはできませんが、以下のように内包表現を用いることで、任意の個数の乱数を発生できます。
import random
# 複数個の乱数を生成する
x = [random.random() for _ in range(1000)]
numpy.random
seed設定
乱数のシードは以下のように設定します
import numpy as np
np.random.seed(42)
一様乱数
0<=x<1.0の乱数を生成するにはrand
を使います。引数は生成する乱数の個数で、rand(10)
であれば10個、rand(3,4)
であれば3×4個の乱数を生成します。
import numpy as np
# 0.0以上1.0未満の乱数を生成
x = np.random.rand(10)
x = np.random.rand(3,4)
(標準)正規分布
標準正規分布の乱数を生成する場合は、randn
を使います。引数はrand
と同じで生成する乱数の個数です。
import numpy as np
# 正規分布の乱数を生成
x = np.random.randn(10)
整数乱数
整数の乱数を発生させる場合は、randint(a, b, n)
の形で指定します。生成されるのは、a<=x<bの範囲(半開区間[a, b))です。n
は、生成する個数です。
import numpy as np
# 整数の乱数を作成 0 <= x < 10
x = np.random.randint(0, 10, 100)
pytorch
seed設定
乱数のシードは以下のように設定します
import torch
torch.manual_seed(42)
一様乱数
0<=x<1.0の乱数を生成するにはrand
を使います。引数は生成する乱数の個数で、rand(10)
であれば10個、rand(10,2)
であれば10×2個の乱数を生成します。
import torch
# 0.0以上1.0未満の乱数を生成
x = torch.rand(10)
x = torch.rand(10, 2)
(標準)正規分布
標準正規分布の乱数を生成する場合は、randn
を使います。引数はrand
と同じで生成する乱数の個数です。
import torch
# 正規分布の乱数を生成
x = torch.randn(2,3,4)
整数乱数
整数の乱数を発生させる場合は、randint(a, b, n)
の形で指定します。生成されるのは、a<=x<bの範囲(半開区間[a, b))です。n
は、生成する個数です。nについては、カッコで括って(100,)
といった形で指定します。こちらも、(10, 3)
というように10×3個などが生成できます。
import torch
# 整数の乱数を作成 0 <= x < 10
x = torch.randint(0, 10, (100,))
まとめ
一様分布、正規分布、整数の乱数の発生方法についてrandom, numpy, pytorchの3種類を並べてみました。numpyとpytorchは似ていますが、少しだけ違ったりするので気を付ける必要があります。