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 期望每个观察值在一列中。

要解决此问题,请对数据进行转置np.cov(data.T)以获得XxX协方差矩阵:

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 回答