【问题标题】:numpy.random.multivariate_normal(mean, cov[, size])numpy.random.multivariate_normal(mean, cov[, size])
【发布时间】:2013-02-17 07:10:34
【问题描述】:

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 列的协方差矩阵。 任何人都可以建议修复。

【问题讨论】:

    标签: python numpy covariance


    【解决方案1】:

    这与numpy.cov 如何解释它的第一个参数有关。你有一个连续的观察,而numpy.cov expects each observation in a column.

    要修复,对np.cov(data.T)中的数据进行转置得到X x X协方差矩阵:

    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)
    

    【讨论】:

    • 感谢 Unutbu,我不知何故错过了那部分。现已修复!
    猜你喜欢
    • 2016-04-28
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2018-11-09
    相关资源
    最近更新 更多