python入门教程2[Python标准库]random——伪随机数生成器(二)
采样
很多模拟需要从大量输入值中得到随机样本。sample() 函数可以生成无重复值的样本,且不会修改输入序列。下面的例子会打印系统字典中单词的一个随机样本。
import randomwith open('/usr/share/dict/words', 'rt') as f: words = f.readlines()words = [ w.rstrip() for w in words ]for w in random.sample(words, 5): print w
生成结果集的算法会考虑输入的规模和所请求的样本,从而尽可能高效地生成结果。
多个并发生成器
苹果isalpha函数怎么用 除了模块级函数,random 还包括一个 Random 类来管理多个随机数生成器的内部状态。之前介绍的所有函数都可以作为 Random 实例的方法得到,而且各个实例可以单独初始化和使用,而不会与其他实例返回的值相互干扰。
import randomimport timeprint 'Default initializion:\n'r1 = random.Random()r2 = random.Random()for i in xrange(3): print '%04.3f %04.3f' % (r1.random(), r2.random())print '\nSame seed:\n'seed = time.time()r1 = random.Random(seed)r2 = random.Random(seed)for i in xrange(3): print '%04.3f %04.3f' % (r1.random(), r2.random()
很多模拟需要从大量输入值中得到随机样本。sample() 函数可以生成无重复值的样本,且不会修改输入序列。下面的例子会打印系统字典中单词的一个随机样本。
import randomwith open('/usr/share/dict/words', 'rt') as f: words = f.readlines()words = [ w.rstrip() for w in words ]for w in random.sample(words, 5): print w
生成结果集的算法会考虑输入的规模和所请求的样本,从而尽可能高效地生成结果。
多个并发生成器
苹果isalpha函数怎么用 除了模块级函数,random 还包括一个 Random 类来管理多个随机数生成器的内部状态。之前介绍的所有函数都可以作为 Random 实例的方法得到,而且各个实例可以单独初始化和使用,而不会与其他实例返回的值相互干扰。
import randomimport timeprint 'Default initializion:\n'r1 = random.Random()r2 = random.Random()for i in xrange(3): print '%04.3f %04.3f' % (r1.random(), r2.random())print '\nSame seed:\n'seed = time.time()r1 = random.Random(seed)r2 = random.Random(seed)for i in xrange(3): print '%04.3f %04.3f' % (r1.random(), r2.random()
setup utility设置开机启动)
如果系统上设置了很好的内置随机值种子,不同实例会有唯一的初始状态。不过,如果没有一个好的平台随机值生成器,不同实例往往会用当前时间作为种子,因此会生成相同的值。
为了确保生成器从随机周期的不同部分生成值,可以使用 jumpahead() 调整其中一个生成器的初始状态。
import randomimport timer1 = random.Random()r2 = random.Random()# Force r2 to a different part of the random period than r1.r2.state())r2.jumpahead(1024)for i in xrange(3): print '%04.3f %04.3f' % (r1.random(), r2.random())
jumpahead() 的参数应当是基于各生成器所需值个数的一个非负整数。生成器的内部状态根据这个输入值调整,但并不只是按给定的步数递增。无功补偿是指
SystemRandom
有些操作系统提供了一个随机数生成器,可以访问更多能够引入生成器的信息源。random 通过 SystemRandom 类提供了这个特性,这个类与 Random 的 API 相同,不过使用 os.urandom() 生成值,这构成了所有其他算法的基础。
如果系统上设置了很好的内置随机值种子,不同实例会有唯一的初始状态。不过,如果没有一个好的平台随机值生成器,不同实例往往会用当前时间作为种子,因此会生成相同的值。
为了确保生成器从随机周期的不同部分生成值,可以使用 jumpahead() 调整其中一个生成器的初始状态。
import randomimport timer1 = random.Random()r2 = random.Random()# Force r2 to a different part of the random period than r1.r2.state())r2.jumpahead(1024)for i in xrange(3): print '%04.3f %04.3f' % (r1.random(), r2.random())
jumpahead() 的参数应当是基于各生成器所需值个数的一个非负整数。生成器的内部状态根据这个输入值调整,但并不只是按给定的步数递增。无功补偿是指
SystemRandom
有些操作系统提供了一个随机数生成器,可以访问更多能够引入生成器的信息源。random 通过 SystemRandom 类提供了这个特性,这个类与 Random 的 API 相同,不过使用 os.urandom() 生成值,这构成了所有其他算法的基础。
import randomimport timeprint 'Default initializion:\n'r1 = random.SystemRandom()r2 = random.SystemRandom()for i in xrange(3): print '%04.3f %04.3f' % (r1.random(), r2.random())print '\nSame seed:\n'seed = time.time()r1 = random.SystemRandom(seed)r2 = random.SystemRandom(seed)for i in xrange(3): print '%04.3f %04.3f' % (r1.random(), r2.random())
matlab耦合函数图像 SystemRandom 产生的序列是不可再生的,因为其随机性来自系统,而不是来自软件状态(实际上,seed() 和 setstate() 根本不起作用)。
非均匀分布
random() 生成的值为均匀分布,这对于很多用途来说非常有用,不过,另外一些分布可以更准确地对特定情况建模。random 模块还包含一些函数来生成这样一些分布的值。这里将列出这些分布,但是并不打算详细介绍,因为它们往往只在特定条件下使用,而且需要更复杂的例子来说明。
1. 正态分布
正态分布(normal distribution)常用于非均匀的连续值,如梯度、高度、重量等等。正态分布产生的曲线有一个独特形状,所以被昵称为“钟形曲线”。random 包含两个函数可
matlab耦合函数图像 SystemRandom 产生的序列是不可再生的,因为其随机性来自系统,而不是来自软件状态(实际上,seed() 和 setstate() 根本不起作用)。
非均匀分布
random() 生成的值为均匀分布,这对于很多用途来说非常有用,不过,另外一些分布可以更准确地对特定情况建模。random 模块还包含一些函数来生成这样一些分布的值。这里将列出这些分布,但是并不打算详细介绍,因为它们往往只在特定条件下使用,而且需要更复杂的例子来说明。
1. 正态分布
正态分布(normal distribution)常用于非均匀的连续值,如梯度、高度、重量等等。正态分布产生的曲线有一个独特形状,所以被昵称为“钟形曲线”。random 包含两个函数可
以生成正态分布的值,分别是 normalvariate() 和稍快一些的 gauss()。(正态分布也称为高斯分布)
还有一个相关的函数 lognormvariate(),它可以生成对数呈正态分布的伪随机值。对数正态分布适用于多个不交互随机变量的积。
2. 近似分布
三角分布用于小样本的近似分布。三角分布的“曲线”中,低点在已知的最小和最大值,在模式值处有一个高点,这要根据“最接近”的结果(由 trianglar() 的模式参数反映)来估计。
3. 指数分布
expovariate() 可以生成一个指数分布,这对于模拟到达或间隔时间值用于齐次泊松过程会很有用,如放射衰变速度或到达 Web 服务器的请求。
很多可观察的现象都适用帕累托分布或幂律分布,这个分布因 Chris Anderson 的“长尾效应”而普及。paretovariate() 函数对于模拟资源分配很有用(人的财富、音乐家的需求、对博客的关注,等等)。
4. 角分布
switch怎么设置语句用法
还有一个相关的函数 lognormvariate(),它可以生成对数呈正态分布的伪随机值。对数正态分布适用于多个不交互随机变量的积。
2. 近似分布
三角分布用于小样本的近似分布。三角分布的“曲线”中,低点在已知的最小和最大值,在模式值处有一个高点,这要根据“最接近”的结果(由 trianglar() 的模式参数反映)来估计。
3. 指数分布
expovariate() 可以生成一个指数分布,这对于模拟到达或间隔时间值用于齐次泊松过程会很有用,如放射衰变速度或到达 Web 服务器的请求。
很多可观察的现象都适用帕累托分布或幂律分布,这个分布因 Chris Anderson 的“长尾效应”而普及。paretovariate() 函数对于模拟资源分配很有用(人的财富、音乐家的需求、对博客的关注,等等)。
4. 角分布
switch怎么设置语句用法
米塞斯分布或圆正态分布(由 vonmisesvariate() 生成)用于计算周期值的概率,如角度,日历日期和时间。
5. 大小分布
betavariate() 生成 Beta 分布的值,常用于贝叶斯统计和应用,如任务持续时间建模。
gammavariate() 生成的伽玛分布用于对事物的大小建模,如等待时间、雨量和计算错误。
weibullvariate() 计算的韦伯分布用于故障分析、工业工程和天气预报。它描述了粒子或其他离散对象的大小分布。
5. 大小分布
betavariate() 生成 Beta 分布的值,常用于贝叶斯统计和应用,如任务持续时间建模。
gammavariate() 生成的伽玛分布用于对事物的大小建模,如等待时间、雨量和计算错误。
weibullvariate() 计算的韦伯分布用于故障分析、工业工程和天气预报。它描述了粒子或其他离散对象的大小分布。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论