如何在 Python 中对多变量对数正态分布进行采样? 您所在的位置:网站首页 对数怎么用 如何在 Python 中对多变量对数正态分布进行采样?

如何在 Python 中对多变量对数正态分布进行采样?

2023-04-15 09:21| 来源: 网络整理| 查看: 265

百度翻译此文   有道翻译此文 问题描述

Using Python, how can I sample data from a multivariate log-normal distribution? For instance, for a multivariate normal, there are two options. Let's assume we have a 3 x 3 covariance matrix and a 3-dimensional mean vector mu.

# Method 1 sample = np.random.multivariate_normal(mu, covariance) # Method 2 L = np.linalg.cholesky(covariance) sample = L.dot(np.random.randn(3)) + mu

I found numpy's numpy.random.lognormal, but that only seems to work for univariate samples. I also noticed scipy's scipy.stats.lognorm. This does seem to have the potential for multivariate samples. However, I can't figure out how to do this.

推荐答案

A multivariate lognormal distributed random variable Rv should have this property: log(Rv) should follow a normal distribution. Therefore, the problem is really just to generation a random variable of multivariate normal distribution and np.exp it.

In [1]: import numpy.random as nr In [2]: cov = np.array([[1.0, 0.2, 0.3,], [0.2, 1.0, 0.3,], [0.3, 0.3, 1.0]]) In [3]: mu = np.log([0.3, 0.4, 0.5]) In [4]: mvn = nr.multivariate_normal(mu, cov, size=5) In [5]: mvn # This is multivariate normal Out[5]: array([[-1.36808854, -1.32562291, -1.9706876 ], [-2.13119289, 1.28146425, 0.66000019], [-2.82590272, -1.22500654, -0.32635701], [-0.4967589 , -0.34469589, -2.04084115], [-0.85590235, -1.27133544, -0.70959595]]) In [6]: mvln = np.exp(mvn) In [7]: mvln # This is multivariate log-normal Out[7]: array([[ 0.25459314, 0.26563744, 0.139361 ], [ 0.11869562, 3.60190996, 1.9347927 ], [ 0.05925514, 0.29375578, 0.72154754], [ 0.60849968, 0.70843576, 0.12991938], [ 0.42489961, 0.28045684, 0.49184289]])


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有