在numpy的multivariate_normal随机抽样中指定球面协方差

时间:2013-05-16 02:18:39

标签: numpy random-sample

在numpy手册中,据说:

Instead of specifying the full covariance matrix, popular approximations include:  
    Spherical covariance (cov is a multiple of the identity matrix)

有没有人指定球面协方差?我试图让它工作以避免构建完整的协方差矩阵,这是一个耗费大量内存的。

2 个答案:

答案 0 :(得分:1)

如果你只有一个对角线协方差矩阵,那么自己缩放标准正态变量通常更容易(也更有效),而不是使用multivariate_normal()

>>> import numpy as np
>>> stdevs = np.array([3.0, 4.0, 5.0])
>>> x = np.random.standard_normal([100, 3])
>>> x.shape
(100, 3)
>>> x *= stdevs
>>> x.std(axis=0)
array([ 3.23973255,  3.40988788,  4.4843039 ])

答案 1 :(得分:1)

虽然@ RobertKern的方法是正确的,但你可以让numpy为你处理所有这些,因为np.random.normal将在多种方式和标准偏差上进行广播:

>>> np.random.normal(0, [1,2,3])
array([ 0.83227999,  3.40954682, -0.01883329])

要获得多个随机样本,您必须给它一个合适的大小:

>>> x = np.random.normal(0, [1, 2, 3], size=(1000, 3))
>>> np.std(x, axis=0)
array([ 1.00034817,  2.07868385,  3.05475583])