Numpy 大高斯分布的稳定抽样
我试图对协方差矩阵Numpy 大高斯分布的稳定抽样,numpy,eigen,gaussian,Numpy,Eigen,Gaussian,我试图对协方差矩阵p的高斯分布进行采样,即NbyN,其中N非常大(约4000) 通常人们会这样做: 计算P:L的Cholesky分解,从而L*L.T=P 对正态高斯分布进行抽样:X~N(0,I_N),其中I_N是恒等式,N=4000 从Y=L*X 这里的障碍是计算L。由于计算的Cholesky分解不满足L*L.T!=P 在计算其Cholesky分解(除以其最大值)之前,我尝试对p进行规范化,但没有成功。我使用C++库Eigen,我也注意到这个问题,NuPy也。 有什么建议吗?如果输入矩阵实际上是
p
的高斯分布进行采样,即N
byN
,其中N
非常大(约4000)
通常人们会这样做:
P
:L
的Cholesky分解,从而L*L.T=P
X~N(0,I_N)
,其中I_N
是恒等式,N=4000
Y=L*X
L
。由于计算的Cholesky分解不满足L*L.T!=P
在计算其Cholesky分解(除以其最大值)之前,我尝试对p
进行规范化,但没有成功。我使用C++库Eigen,我也注意到这个问题,NuPy也。
有什么建议吗?如果输入矩阵实际上是正定的,Cholesky分解应该是相当稳定的。如果矩阵是(接近)半定矩阵或非定矩阵,则可能会出现问题。 在这种情况下,可以使用LDLT分解。对于输入
A
,它计算排列P
、单位对角线三角形L
和对角线D
,从而
A = P.T*L*D*L.T*P
A = V * D * V^{-1}
然后,您当然需要Y=sqrt(D)*L*X
,而不是乘Y=L*X
,其中sqrt(D)
是一个元素相关的sqrt(我不知道python语法)
请注意,您可以忽略置换,因为置换相同独立分布随机数的向量仍然是i.i.d.数的向量
如果仍然不起作用,请尝试使用自伴特征解算器
-分解。
这计算特征值的对角矩阵D
和特征向量的一元矩阵V
,从而
A = P.T*L*D*L.T*P
A = V * D * V^{-1}
你基本上可以做和上面一样的事情。(注意,对于一元论矩阵,
V^{-1}
只是V
的伴随,即在实值情况下,V^{-1}=V^T
)谢谢,我最后做了一个自伴随矩阵分解,它做了三次简单的注释,但你的上一个方程应该是a=V*D*V^T
,因为如果不利用V的正交性来为你的利益服务,那将是一种耻辱。