100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Python随机数生成(一):random模块

Python随机数生成(一):random模块

时间:2023-12-21 17:06:32

相关推荐

Python随机数生成(一):random模块

Python随机数生成(一):random模块

random模块生成随机数(1)生成随机整数① random.randint(a, b)② random.randrange(start, stop[, step]) (2)生成随机浮点数① random.random()② random.uniform(a, b) (3)从指定序列中生成随机数① random.choice(seq)② random.choices(seq, weights=None, *, cum_weights=None, k=1)③ random.sample(seq, k)④ random.shuffle(seq) (4)生成特定分布的随机数1、均匀分布① random.random()② random.uniform(a, b) 2、三角分布① random.triangular(low, high, mode) 3. 指数分布① random.expovariate(lambd) 4. 正态分布① random.normalvariate(mu, sigma) 5. 对数正态分布① random.lognormvariate(mu, sigma) 6. 高斯分布① random.gauss(mu, sigma) 7. Beta分布① random.betavariate(alpha, beta) 8. Gamma分布① random.gammavariate(alpha, beta) 9. 帕累托分布① random.paretovariate(alpha) 10. 威布尔分布① random.weibullvariate(alpha, beta) 11. 冯·米塞斯分布① random.vonmisesvariate(mu, kappa) 参考文献

在Python中随机数生成主要有两种途径,一是利用random模块生成,二是利用numpy库中random函数生成。在我们日常使用中,如果是为了得到随机的单个数,多考虑random模块;如果是为了得到随机小数或者整数的矩阵,就多考虑numpy中的random函数

除此之外,scipy.stats模块也可以生成随机数和特定分布的随机数。

其他方式生成随机数见笔者的其他文章:

Python随机数生成(二):numpy库中random函数

random模块生成随机数

(1)生成随机整数

① random.randint(a, b)

功能:返回随机整数 N 满足 a ≤ N ≤ b。相当于 randrange(a, b+1)。

用法:

import randomnumber = random.randint(3,7)# 输出:6

② random.randrange(start, stop[, step])

功能:在生成的<以a为始,每step递增,以b为终>这样的一个整数序列中随机选择一个数。[, step]代表该参数是可选参数。

用法:

import randomnumber = random.randrange(2,8,2)# 输出:6

(2)生成随机浮点数

① random.random()

功能:生成一个[0,1) 间的随机浮点数。

用法:

import randomnumber = random.random()# 输出:0.7365131579088379

② random.uniform(a, b)

功能:返回一个a,b间的随机浮点数N,当 a ≤ b 则N的范围为[a,b],当 b < a 则N的范围为[b,a]。

用法:

import randomnumber = random.uniform(1,4)# 输出:1.8288291918995063

(3)从指定序列中生成随机数

① random.choice(seq)

功能:从序列seq中随机选择一个元素。

用法:

import randoma = random.choice(range(1,10))# 输出:4b = random.choice('abcdefg')# 输出:e

② random.choices(seq, weights=None, *, cum_weights=None, k=1)

功能:从序列seq中以指定的权重随机选择k个元素,返回一个新的列表。

如果指定了 weight 序列,则根据相对权重进行选择。如果指定了 cum_weights 序列,则根据累积权重进行选择。如果既未指定 weight 也未指定 cum_weights ,则以相等的概率进行选择。如果提供了权重序列,则它必须与 seq 序列的长度相同

用法:

import randoma = random.choices(['red', 'black', 'green'], [18, 18, 2], k=6)# 输出:['red', 'black', 'red', 'red', 'black', 'red']

③ random.sample(seq, k)

功能:从序列seq中随机选择k个元素,返回一个新的列表。

用法:

import randoma = ['小红','小兰','小王','小张','小梁']b = random.sample(a,2)# 输出:['小梁', '小王']

④ random.shuffle(seq)

功能:将序列seq中的元素随机排序。

用法:

import randoma = ['小红','小兰','小王','小张','小梁']random.shuffle(a) # 打乱这个操作不需要重新定义对象,它作用的是对象本身# 输出:['小兰', '小王', '小红', '小梁', '小张']

(4)生成特定分布的随机数

1、均匀分布

均匀分布,就是在事件空间中,所有事件的概率都是相等的连续分布,其概率密度为

其均值为(a+b)/2 ,方差为(b−a)^2/12

① random.random()

功能:生成一个[0,1) 间的随机浮点数。

用法见前文。

② random.uniform(a, b)

功能:返回一个a,b间的随机浮点数N,当 a ≤ b 则N的范围为[a,b],当 b < a 则N的范围为[b,a]。

用法见前文。

2、三角分布

对于下限为a,上限为b,众数为c的三角分布,其概率密度函数为

① random.triangular(low, high, mode)

功能:返回一个三角分布的随机浮点数 N ,使得 low ≤ N ≤ high ,mode指明众数出现的位置 。 low 和 high 默认为0和1。 mode 参数默认为 low 和 high 之间的中点,给出一个对称的三角分布。

用法:

import randomimport matplotlib.pyplot as pltimport seaborn as snsdata = [random.triangular(2,3,2.5) for i in range(20000)]plt.hist(data, bins=100, color="#FF0000", alpha=.7) # 直方图sns.kdeplot(data, shade=True,color="#FF0000")#密度图

直方图:

密度图:

3. 指数分布

指数分布为连续型分布,概率密度函数为:

分布函数为:

期望: , 方差:

① random.expovariate(lambd)

功能:指数分布。 lambd 是 1.0 除以所需的平均值,它应该是非零的。 (该参数本应命名为 “lambda” ,但这是 Python 中的保留字。)如果 lambd 为正,则返回值的范围为 0 到正无穷大;如果 lambd 为负,则返回值从负无穷大到 0。

用法:

import randomimport matplotlib.pyplot as pltimport seaborn as snsdata = [random.expovariate(2) for i in range(50000)]plt.hist(data, bins=100, color="#FF0000", alpha=.7) # 直方图sns.kdeplot(data, shade=True,color="#FF0000") # 密度图

直方图:

密度图:

4. 正态分布

① random.normalvariate(mu, sigma)

功能:正态分布。 mu 是平均值,sigma 是标准差。

用法:

import randomimport matplotlib.pyplot as pltimport seaborn as snsdata = [random.normalvariate(2,4) for i in range(20000)]plt.hist(data, bins=100, color="#FF0000", alpha=.7) # 直方图sns.kdeplot(data, shade=True,color="#FF0000") # 密度图

直方图:

密度图:

5. 对数正态分布

① random.lognormvariate(mu, sigma)

功能:对数正态分布。 若采用这个分布的自然对数,将得到一个平均值为 mu 和标准差为 sigma的正态分布 。 mu 可以是任何值,sigma 必须大于零。

用法:

import randomimport matplotlib.pyplot as pltimport seaborn as snsdata = [random.lognormvariate(4,2) for i in range(50000)]plt.hist(data, bins=100, color="#FF0000", alpha=.7) # 直方图sns.kdeplot(data, shade=True,color="#FF0000") # 密度图

直方图:

密度图:

6. 高斯分布

① random.gauss(mu, sigma)

功能:高斯分布。 mu 是平均值,sigma 是标准差。 这比random.normalvariate(mu, sigma)函数略快。

用法:

import randomimport matplotlib.pyplot as pltimport seaborn as snsdata = [random.gauss(2,2) for i in range(50000)]plt.hist(data, bins=100, color="#FF0000", alpha=.7) # 直方图sns.kdeplot(data, shade=True,color="#FF0000") # 密度图

直方图:

密度图:

7. Beta分布

① random.betavariate(alpha, beta)

功能:Beta 分布。 参数的条件是 alpha > 0 和 beta > 0。 返回值的范围介于 0 和 1 之间。

用法:

import randomimport matplotlib.pyplot as pltimport seaborn as snsdata = [random.betavariate(1,2) for i in range(20000)]plt.hist(data, bins=100, color="#FF0000", alpha=.7) # 直方图sns.kdeplot(data, shade=True,color="#FF0000") # 密度图

直方图:

密度图:

8. Gamma分布

① random.gammavariate(alpha, beta)

功能:Gamma 分布。( 不是 gamma 函数!)参数的条件是 alpha > 0 和 beta > 0。

用法:

import randomimport matplotlib.pyplot as pltimport seaborn as snsdata = [random.gammavariate(2,2) for i in range(50000)]plt.hist(data, bins=100, color="#FF0000", alpha=.7) # 直方图sns.kdeplot(data, shade=True,color="#FF0000") # 密度图

直方图:

密度图:

9. 帕累托分布

帕累托在1906年提出了有关意大利社会财富分配的分配规律,即20%的人口掌握了80%的财富,这个规律后来被发现十分普遍,以至于约瑟夫·朱兰后来将其称为帕累托法则,也被成为八二法则。

帕累托分布正是对这一规则的描述,其概率分布函数为

① random.paretovariate(alpha)

功能:帕累托分布。 alpha 是形状参数。

用法:

import randomimport matplotlib.pyplot as pltimport seaborn as snsdata = [random.paretovariate(4) for i in range(50000)]plt.hist(data, bins=100, color="#FF0000", alpha=.7) # 直方图sns.kdeplot(data, shade=True,color="#FF0000") # 密度图

直方图:

密度图:

10. 威布尔分布

① random.weibullvariate(alpha, beta)

功能:威布尔分布。 alpha 是比例参数,beta 是形状参数。

用法:

import randomimport matplotlib.pyplot as pltimport seaborn as snsdata = [random.weibullvariate(1,2) for i in range(20000)]plt.hist(data, bins=100, color="#FF0000", alpha=.7) # 直方图sns.kdeplot(data, shade=True,color="#FF0000") # 密度图

直方图:

密度图:

11. 冯·米塞斯分布

① random.vonmisesvariate(mu, kappa)

功能:冯·米塞斯分布。 mu 是平均角度,以弧度表示,介于0和 2pi 之间,kappa 是浓度参数,必须大于或等于零。 如果 kappa 等于零,则该分布在 0 到 2pi 的范围内减小到均匀的随机角度。

用法:

import randomimport matplotlib.pyplot as pltimport seaborn as snsdata = [random.vonmisesvariate(2,2) for i in range(20000)]plt.hist(data, bins=100, color="#FF0000", alpha=.7) # 直方图sns.kdeplot(data, shade=True,color="#FF0000") # 密度图

直方图:

密度图:

参考文献

1、Python中随机数的生成

2、Random模块的官方文档

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。