您的位置:

用Python的Numpy库的Random模块生成高效、随机、分布式的数据

一、Numpy库介绍

NumPy是Python语言的一个扩充程序库,利用它可以更加方便地进行科学计算。它是收集了各种各样的数学和科学运算模式的一个大杂烩。不仅如此,NumPy还为数组运算提供了大量的支持,这些函数可以让你轻松处理数学运算和数组运算,使得众多科学计算的问题变得异常简单。

而在NumPy库中,Random模块是用于生成随机数据的模块,在数据模拟、随机算法等方面起到了很大的作用。

二、随机数生成

在Python中,我们可以用random模块来生成随机数。不过,Numpy中的Random模块则可以更高效地生成随机数。在NumPy中,我们可以使用rand()、randn()和randint()函数来生成随机数。

1. rand()函数

rand()函数生成一个\[0,1\]区间的随机数,并且这些随机数是均匀分布的

import numpy as np
a = np.random.rand(3,3)
print(a)

输出:

array([[ 0.34323275,  0.07146803,  0.85739212],
       [ 0.1031421 ,  0.18833668,  0.51419756],
       [ 0.55054841,  0.71160147,  0.93443114]])

2. randn()函数

randn()函数可以生成标准正态分布(μ=0,σ=1)的随机数。它们是不同的,因为后者按照正态分布生成随机数,而前者按照均匀分布生成随机数。

b = np.random.randn(3,3)
print(b)

输出:

array([[ 0.2490965 ,  1.01225325,  0.29993122],
       [ 0.39395521,  0.44237272,  1.46365166],
       [ 1.18778469,  0.2700795 ,  0.47529234]])

3. randint()函数

randint()函数可以生成一个给定的半开区间内\[low, high)的整数,包括low,但是不包括high。

low, high = 1, 100
c = np.random.randint(low, high, size=(3,3))
print(c)

输出:

array([[58, 18, 38],
       [56, 22, 56],
       [96, 93, 55]])

三、随机生成分布的数据

1. 生成正态分布数据

除了生成标准正态分布随机数之外,我们还可以使用normal(loc, scale, size)函数生成正态(高斯)分布的随机数。

  • loc:正态分布的均值
  • scale:正态分布的标准差
  • size:输出的随机数的维度大小
mu, sigma = 0, 0.1
s = np.random.normal(mu, sigma, 1000)
print(s)

输出:

array([ 0.19041012,  0.00838044,  0.1057123 ,  0.23882289, -0.07714065,
        0.08705977, -0.02627654, -0.19861715,  0.00686985,  0.15619873,
        ...,
        0.08181724, -0.10527211, -0.1526315 , -0.11637847, -0.08640187,
        0.00130285,  0.08699732,  0.17909456, -0.1137537 , -0.13693572])

2. 生成泊松分布数据

使用numpy库的poisson(lam, size=None)函数可以生成一个参数为λ给出的泊松分布的随机数。

lam = 3 # lamda
size = 1000
s = np.random.poisson(lam, size)
print(s)

输出:

array([1, 2, 2, 1, 7, 3, 3, 5, 1, 6, ..., 6, 5, 1, 2, 4, 3, 2, 1, 1, 2])

3. 生成Beta分布数据

Beta分布是一种常用的概率分布,其结果在\[0,1\]区间内。使用numpy库的beta函数,可以选择生成形态参数为α和β的Beta分布的随机数。

alpha, beta = 2, 5
s = np.random.beta(alpha, beta, 1000)
print(s)

输出:

array([ 0.31903005,  0.11387955,  0.42286611,  0.44858347, ..., 
        0.46468957,  0.38638198,  0.29959251,  0.18525859])

四、分布函数的可视化

可视化可以帮助我们更好的理解生成的数据分布情况,而matplotlib库是一个用于绘图的常用工具,在与numpy配合使用时,可随机生成各种图形。下面我们来生成一个正态分布的图形可视化,代码如下:

import matplotlib.pyplot as plt
mu, sigma = 0, 0.1
s = np.random.normal(mu, sigma, 1000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *
         np.exp( - (bins - mu)**2 / (2 * sigma**2) ),
         linewidth=2, color='r')
plt.show()

输出:

五、总结

NumPy库的Random模块为我们生成高效、随机、分布式的数据提供了非常好的方法,我们可以根据需要生成符合自己要求的分布式的随机数据并进行可视化,大大提高了数据模拟和随机算法等方面的效率。