【Python】多変量正規分布のデータ発生

こんにちはたくまろです。今回はPythonで多変量正規分布のデータ発生させます。
はじめに、パッケージをインポートしてください。

import numpy as np
np.random.multivariate_normal()

でも出来ますが、次元数が高いと計算速度が遅いので、自分でコードを書きました。標準正規部分を発生させてから、データを変換しているためより早く多変量正規分布のデータ発生させています。高次元の正規分布からデータを速く発生させたい方はご参照ください。

###input###
# mu     mean vector 
# sigma  covariance matrix
# n      sample size
###output###
# n*d data matrix

def datagene_norm(mu,sigma,n):
    d = sigma.shape[1]
    Z = np.random.normal(size=[n,d])
    eig_val, eig_vec = np.linalg.eig(sigma)
    Gam = np.dot(eig_vec,np.diag(np.sqrt(eig_val)))
    return (np.dot(Z,Gam.T) + np.array([mu for i in range(n)]))

では、実際に使ってみます。

d = 100
n = 10
mu = np.array([11 for i in range(d)])
sigma = np.diag(np.ones(d))
X = datagene_norm(mu,sigma,n)
X.shape
>> (10,100)



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です