2

numpy.random.multivariate_normal(mean、cov [、size])

N点とX次元のデータセットがあります。したがって、numpy.mean(data、axis = 0)とnumpy.cov(data)を計算し、numpy.random.multivariate_normal(mean、cov)の平均値とcov値を使用する場合。次のエラーがスローされます

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "mtrand.pyx", line 3986, in mtrand.RandomState.multivariate_normal (numpy/random/mtrand/mtrand.c:16833)
ValueError: mean and cov must have same length

これは、numpy.mean()が列ごとに平均を計算し、X次元配列を提供するためです。一方、numpy.cov()の出力は、N行X列の共分散行列です。誰かが修正を提案できますか?

4

1 に答える 1

4

これはnumpy.cov、最初の引数をどのように解釈するかと関係があります。numpy.covは列に各観測値を期待しているのに対し、行には各観測値があります。

修正するには、データの転置を取り込んでx共分散行列np.cov(data.T)を取得します。XX

In [58]: N, X = 100, 3

In [59]: data = np.random.random((N,X))

In [60]: mean = np.mean(data, axis = 0)

In [61]: mean
Out[61]: array([ 0.4913433 ,  0.49484566,  0.52463666])

In [62]: np.cov(data.T).shape
Out[62]: (3, 3)

In [63]: cov = np.cov(data.T)

In [64]: np.random.multivariate_normal(mean, cov)
Out[64]: array([ 0.27194062,  0.65995531,  0.67367201])

rowval=Falseまたは、次のパラメータを使用します。

In [68]: cov = np.cov(data, rowvar=False)

In [69]: cov.shape
Out[69]: (3, 3)
于 2013-03-02T23:16:32.940 に答える