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は似ていますが、少しだけ違ったりするので気を付ける必要があります。

