如何在Python中从对数正态分布中生成随机数

如何在Python中从对数正态分布中生成随机数

在概率论中,一个对数通常分布的随机变量的连续概率分布被称为对数正态(或对数正态)分布。

当且仅当对数(x)遵循正态分布时,才称一个变量x遵循对数正态分布。PDF的定义如下。

如何在Python中从对数正态分布中生成随机数?

概率密度函数 对数正态

其中mu是人口平均值,sigma是变量的对数正态分布的标准差。就像正态分布是大量独立和相同分布的随机变量相加的表现,对数正态是大量独立和相同分布的随机变量相乘的结果。在NumPy库的帮助下,从对数正态分布中生成一个随机数非常容易。

语法:

numpy.random.lognormal(mean=0.0, sigma=1.0, size=None)

参数:

  • mean:它取的是基础正态分布的均值。
  • sigma:它只对基础正态分布的标准差取非负值。
  • size : 它接收一个int或一个给定形状的tuple。如果传递的是一个单一的值,它返回一个单一的整数作为结果。如果是一个元组,那么它返回一个对数正态分布的2D矩阵。

返回:从参数化对数正态分布中抽取的样本(nd数组或标量)。

下面的例子描述了如何从对数正态分布中生成随机数。

# import modules
import numpy as np
import matplotlib.pyplot as plt
  
# mean and standard deviation
mu, sigma = 3., 1.  
s = np.random.lognormal(mu, sigma, 10000)
  
# depict illustration
count, bins, ignored = plt.hist(s, 30,
                                density=True, 
                                color='green')
x = np.linspace(min(bins),
                max(bins), 10000)
  
pdf = (np.exp(-(np.log(x) - mu)**2 / (2 * sigma**2))
       / (x * sigma * np.sqrt(2 * np.pi)))
  
# assign other attributes
plt.plot(x, pdf, color='black')
plt.grid()
plt.show()

输出:

如何在Python中从对数正态分布中生成随机数?

让我们用python来证明对数正态是随机变量的独立且相同的分布的乘积。在下面的程序中,我们要从正态分布中随机生成1000个点,然后取它们的乘积,最后绘制成对数正态分布。

# Importing required modules
import numpy as np
import matplotlib.pyplot as plt
  
b = []
  
# Generating 1000 points from normal distribution.
for i in range(1000):
    a = 12. + np.random.standard_normal(100)
    b.append(np.product(a))
  
# Making all negative values  into positives
b = np.array(b) / np.min(b)
count, bins, ignored = plt.hist(b, 100, 
                                density=True, 
                                color='green')
  
sigma = np.std(np.log(b))
mu = np.mean(np.log(b))
  
# Plotting the graph.
x = np.linspace(min(bins), max(bins), 10000)
pdf = (np.exp(-(np.log(x) - mu)**2 / (2 * sigma**2))
       / (x * sigma * np.sqrt(2 * np.pi)))
  
plt.plot(x, pdf,color='black')
plt.grid()
plt.show()

输出:

如何在Python中从对数正态分布中生成随机数?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Numpy教程