Python中多元正态变量的生成器

问题描述

我想从具有给定均值和协方差的多元正态分布中生成样本,当然,numpy.random.multivariate_normal是可能的。但是我想生成这样的东西(从哲学上来说)是无限的,因此我想定义一个多元正态生成器mvn,以便mvn.next()生成另一个具有给定均值和协方差的随机向量。当然,我可以继续调用numpy.random.multivariate_normal(mean,cov,1),但这是非常无效的(我将在每次调用时计算协方差矩阵的特征分解)。当然,我可以自己从头开始实现此功能,但似乎应该已经存在类似的东西...

解决方法

只需建立一些基本事实,这就是实现它的方式:

from collections.abc import Generator
import numpy as np

class multinorm(Generator):
    def __init__(self,themean,themat):
        self.eigs,self.cmat = np.linalg.eigh(themat)
        self.meanvec = themean
        self.thedim = self.meanvec.shape[0]
        self.themult = np.diag(np.sqrt(self.eigs))
    def send(self,ignored_arg):
        tmpvec = np.random.randn(self.thedim)
        return ( self.cmat.T @ self.themult) @ tmpvec + self.meanvec
    def throw(self,type=None,value=None,traceback=None):
        raise StopIteration
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...