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

2024-05-14 10:08:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: numpy定义randommean向量multivariatenext均值
1条回答
网友
1楼 · 发布于 2024-05-14 10:08:15

为了确定一些基本事实,我们可以这样实施它:

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
    

相关问题 更多 >

    热门问题