指定球形协方差,单位为numpy';多元正态随机抽样

指定球形协方差,单位为numpy';多元正态随机抽样,numpy,random-sample,Numpy,Random Sample,numpy手册中说: Instead of specifying the full covariance matrix, popular approximations include: Spherical covariance (cov is a multiple of the identity matrix) 有人指定过球面协方差吗?我正在努力避免构建完整的协方差矩阵,因为这会消耗太多内存。如果你只有一个对角协方差矩阵,通常你自己缩放标准正态变量比使用multivariable\

numpy手册中说:

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

有人指定过球面协方差吗?我正在努力避免构建完整的协方差矩阵,因为这会消耗太多内存。

如果你只有一个对角协方差矩阵,通常你自己缩放标准正态变量比使用
multivariable\u normal()
更容易(也更有效)


虽然@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])

你到底有什么问题?您是否试图构建一个球形协方差矩阵,合理地近似于您的完整协方差矩阵?在这种情况下,需要更多关于您的具体问题的信息。它是这样的:有一个512X512变量数组,每个变量都与256半径内的相邻变量相关,相关系数与距离成反比。因此,我尝试将此数组视为大小为512x512=262144的一维数组,并为其构建
cm
(其大小为262144x262144),然后进行多元随机抽样。蛮力方法确实不切实际。你引用的部分是Robert Kern和Jaime在他们的回答中实现的:它包括完全忘记相关性。如果你能找到一种方法对全协方差矩阵进行对角化分析,或者对其进行某种近似,你可以生成独立的随机变量,然后组合它们来恢复相关性……也许称之为“球面”是不对的,因为矩阵不是对角的。整个问题是这样的:有一个512X512变量数组,每个变量都与256半径内的相邻变量相关,相关系数与距离成反比。所以我试着将这个数组视为一个大小为512x512=262144的一维数组,并为它构建
cm
(其大小为262144x262144),然后制作一个多变量随机样本。好的,是的,从文档使用术语的意义上讲,这不是球形的。在网格嵌入的二维几何空间中有一个球面协方差函数,但这不会在262144-D采样空间中形成球面协方差矩阵。您希望从高斯随机场采样。您可以尝试在中使用Gaussian过程功能,尽管它不会非常有效,因为它不能真正处理网格的特殊情况。谷歌搜索“python高斯随机场”可能会给你一些线索。它似乎确实有效,但我在文档()中找不到这种行为。它在什么地方有记录吗?没有,没有记录,但它是可靠的。这些参数将相互广播,每个广播的参数集将独立采样。
>>> x = np.random.normal(0, [1, 2, 3], size=(1000, 3))
>>> np.std(x, axis=0)
array([ 1.00034817,  2.07868385,  3.05475583])