在学习生活中,我们经常性的发现有很多事物背后都有某种规律,而且,这种规律可能符合某种随机分布,比如:正态分布、对数正态分布、beta分布等等。
所以,了解某种分布对一些事物有更加深入的理解并能清楚的阐释事物的规律性。现在,用python产生一组随机数据,来演示这些分布:
import random import matplotlib import matplotlib.pyplot as plt SAMPLE_SIZE = 1000 buckets = 100 fig = plt.figure() matplotlib.rcParams.update({"font.size": 7}) #第一个图形是在[0,1)之间分布的随机变量(normal distributed random variable)。 ax = fig.add_subplot(5,2,1) ax.set_xlabel("random.random") res = [random.random() for _ in xrange(1, SAMPLE_SIZE)] ax.hist(res, buckets) #第二个图形是一个均匀分布的随机变量(uniformly distributed random variable)。 ax_2 = fig.add_subplot(5,2,2) ax_2.set_xlabel("random.uniform") a = 1 b = SAMPLE_SIZE res_2 = [random.uniform(a, b) for _ in xrange(1, SAMPLE_SIZE)] ax_2.hist(res_2, buckets) #第三个图形是一个三角形分布(triangular distribution)。 ax_3 = fig.add_subplot(5,2,3) ax_3.set_xlabel("random.triangular") low = 1 high = SAMPLE_SIZE res_3 = [random.uniform(low, high) for _ in xrange(1, SAMPLE_SIZE)] ax_3.hist(res_3, buckets) #第四个图形是一个beta分布(beta distribution)。参数的条件是alpha 和 beta 都要大于0, 返回值在0~1之间。 plt.subplot(5,2,4) plt.xlabel("random.betavariate") alpha = 1 beta = 10 res_4 = [random.betavariate(alpha, beta) for _ in xrange(1, SAMPLE_SIZE)] plt.hist(res_4, buckets) #第五个图形是一个指数分布(exponential distribution)。 lambd 的值是 1.0 除以期望的中值,是一个不为零的数(参数应该叫做lambda没但它是python的一个保留字)。如果lambd是整数,返回值的范围是零到正无穷大;如果lambd为负,返回值的范围是负无穷大到零。 plt.subplot(5,2,5) plt.xlabel("random.expovariate") lambd = 1.0/ ((SAMPLE_SIZE + 1) / 2.) res_5 = [random.expovariate(lambd) for _ in xrange(1, SAMPLE_SIZE)] plt.hist(res_5, buckets) #第六个图形是gamma分布(gamma distribution), 要求参数alpha 和beta都大于零。 plt.subplot(5,2,6) plt.xlabel("random.gammavariate") alpha = 1 beta = 10 res_6 = [random.gammavariate(alpha, beta) for _ in xrange(1, SAMPLE_SIZE)] plt.hist(res_6, buckets) #第七个图形是对数正态分布(Log normal distribution)。如果取这个分布的自然对数,会得到一个中值为mu,标准差为sigma的正态分布。mu可以取任何值,sigma必须大于零。 plt.subplot(5,2,7) plt.xlabel("random.lognormalvariate") mu = 1 sigma = 0.5 res_7 = [random.lognormvariate(mu, sigma) for _ in xrange(1, SAMPLE_SIZE)] plt.hist(res_7, buckets) #第八个图形是正态分布(normal distribution)。 plt.subplot(5,2,8) plt.xlabel("random.normalvariate") mu = 1 sigma = 0.5 res_8 = [random.normalvariate(mu, sigma) for _ in xrange(1, SAMPLE_SIZE)] plt.hist(res_8, buckets) #最后一个图形是帕累托分布(Pareto distribution), alpha 是形状参数。 plt.subplot(5,2,9) plt.xlabel("random.normalvariate") alpha = 1 res_9 = [random.paretovariate(alpha) for _ in xrange(1, SAMPLE_SIZE)] plt.hist(res_9, buckets) plt.show()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: 最重要的答案是建议使用switch语句来完成这项工作。但是,如果我要考虑的情况很多,那么代码看起来就很笨拙。我有一个巨大的switch语句,在每种情况下都一遍又一遍地重复非常相似的代码。 当您要考虑的概率很大时,是否有更好,更干净的方法来选择具有一定概率的随机数?(例如〜30) 问题答案: 这是一个Swift实现,受各种答案的影响很大,这些答案会生成具有给定(数字)分布的随机数 对于
我试图找到一种有效的算法来生成一个给定节点数的简单连通图。类似于:
Python3 实例 以下实例演示了如何生成一个随机数:# -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com # 生成 0 ~ 9 之间的随机数 # 导入 random(随机数) 模块 import random print(random.randint(0,9)) 执行以上代码输出结果为: 4 以上
问题内容: 我试图在Go中生成一个随机字符串,这是我到目前为止编写的代码: 我的执行速度很慢。使用进行播种会在一定时间内带来相同的随机数,因此循环会一次又一次地迭代。如何改善我的代码? 问题答案: 每次设置相同的种子,您将获得相同的序列。因此,当然,如果您将种子设置为快速循环中的时间,则可能会多次调用相同的种子。 在您的情况下,在您调用函数直到拥有不同的值之前,您正在等待时间(由Nano返回)。
问题内容: 我有一个具有不同值的概率的文件,例如: 我想使用此分布生成随机数。是否存在处理此问题的现有模块?自己编写代码是很简单的(构建累积密度函数,生成随机值[0,1]并选择相应的值),但似乎这应该是一个常见问题,并且可能有人为它创建了一个函数/模块它。 我需要这个,因为我想生成一个生日列表(不遵循标准模块中的任何分布)。 问题答案: 可能就是你想要的。你可以通过values参数提供概率。然后,