
正文
python随机函数种子 python随机数种子有什么用
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
python中在指定概率分布的情况下,为什么设定随机数种子仍影响random.choice的结果?
运行结果是符合p分布的
for循环改成1000次试试,3、2、0出现的次数分别是587、299、114次,符合0.6、0.3、0.1
import numpy as np
i3 = i2 = i0 = 0
for seed in np.arange(1000):
np.random.seed(seed)
n = np.random.choice(5,p=[0.1, 0, 0.3, 0.6, 0])
i3 += n==3
i2 += n==2
i0 += n==0
print(i3, i2, i0)
随机种子确实影响结果
但不是影响结果的分布情况,而是影响计算机产生随机数的情况,你运行1000次结果一定和我一样,就是因为我们的随机种子给的都是一样的。
随机种子
我们知道计算机无法产生真正的随机数,是通过算法产生的伪随机数,但具有类似于真正随机数的统计特征,如均匀性、独立性等。
随机种子的作用在于给定这个产生随机数算法的初值。给定后会影响以后产生随机数的具体值是多少,但不影响这些随机数的分布情况。
上面那个程序,如果我们不指定随机种子,那么结果符合p分布,但你与我结果不同,同一段代码多次运行结果也不同。如果指定随机种子,那么结果依然符合p分布,但全天下人运行结果都相同。
如果已知两粒种子(随机种子)和两个生长环境(产生随机数算法)都完完全全一样,那么可以得出长出的两个作物完全一样(忽略量子力学影响)。但这两粒种子无论相同与否都不会影响长出的作物到底是玉米还是高粱(不影响结果分布情况)。
相关问答
Q1: python为何规定了种子数,每次还是能产生不同的随机半径?
这是因为,每次生成随机数后,它都会自动设置新的种子。
开始,你设置了 random.seed(1) ,设由这个种子 1 产生的第一个随机数是 x,
然后 Python 会自动把现在的种子设为 x,然后你第二次生成随机数的时候,使用的种子是 x 而不是 1。
所以,如果你想每次都生成同样的半径,那只需要采取下面两个措施之一就可以了:
在 for 循环开始之前先生成随机的半径,然后保存到一个变量里,使用的时候调用这个变量;(推荐)
在每次调用之前都调用 random.seed(1)。即在 for 循环的循环体开头处插入 random.seed(1)。
祝你刷题顺利!
Q2: 【Python 】性能优化系列:随机数
最近在做的项目重点部分与大量生成随机数有关,维度高达[1700000,10000],需要生成 10 x 30 次左右,这里遇到内存和速度的双重瓶颈,特地研究了一下如何优化随机数。
优化时间测试所需的分析工具在另一篇博客《性能优化系列一:分析工具》中提到。
原生的python中也有随机模块生成 random.randint 和 random.random 等,但是速度非常慢,numpy 速度可以大幅提升。一般都采用numpy生成随机数。
比较常用的就是以上几种。在需要生成大量随机数的情况下,或生成伪随机数的情况下,python 3.7 常用 RandomState 。
直接生成大规模非稀疏矩阵如下,经常遇到 MemoryError 的错误,大概是同时生成多个float64精度的大规模随机矩阵服务器内存不够,而random state 似乎也没提供调整类型的attr,
这时最好使用即使生成即使销毁,仅保留种子作为索引,同样,多个CPU之间共享大规模矩阵涉及到共享内存或数据传输同步较慢的问题,最好也共享seed而不是直接共享矩阵。
ps. 这里注意一般我们设置time.time()为种子时,对于并发性程序是无效的,不要在并发程序中同时定义,建议生成一个seed list 列表再从中取。
这里可以对大规模矩阵进行分片以进行后续的np 乘法,再切片赋值,以时间换内存。这种情况的麻烦在于如果设定随机数种子会导致每个分片的随机数相同。可以利用一个最初seed(爷爷种子)randint生成 一组切片组数的seed(父亲种子),再每次从中取不同的随机数。
在上述切片方法尝试之后,可以解决内存问题。但是时间非常慢,特别是采取s = 1时在standard normal 上调用170万次的时间长达3000s,line search一下搜索了大约100000为切片值仍然太慢。在文档中发现了 BitGenerator 和 Generator ,大约可以提速到原来的 1/3。
除了Numpy和基本模块之外,AES CTR 加密算法生成随机数也很快,但是并不能有比较方便的方式控制每次生成的一样。参见以下reference。
tensorflow 和 pytorch 也都有大规模生成随机tensor的方式。性能待考。
1. 超快生成随机数的方式CSDN博客
2. tensorflow 生成随机tensor
Q3: python函数深入浅出 17.random.randint()函数详解
random() 函数命名来源于英文单词random(随机)。
randint是random + integer拼接简写而成python随机函数种子,代表随机一个整数
Python标准库中的random函数python随机函数种子,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等。
random.randint() 函数的例子python随机函数种子:
用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n:a=n=b
a必须小于或等于b,否则报错。
其python随机函数种子他random的方法:
无
随机数是用于生成测试入参的好办法,也常见于各种需要随机的场合。
但是每次随机带来的不确定性也会造成某些验证功能的困难,因此可以使用random.seed()通过指定随机的种子值保证每次生成随机数是同一序列的伪随机数。观察下面的输出:
对基础运行环境有疑问的,推荐参考: python函数深入浅出 0.基础篇
Q4: python中random什么意思
Random意思是返回一个0~num-1之间的随机数。 random(num)是在stdlib.h中的一个宏定义。num和函数返回值都是整型数。
如需要在一个random()序列上生成真正意义的随机数,在执行其子序列时使用randomSeed()函数预设一个绝对的随机输入,例如在一个断开引脚上的analogRead()函数的返回值。
Random的作用
Random使用之前需要使用Randomize语句进行随机数种子的初始化。RANDOM产生的是伪随机数或者说是用一种复杂的方法计算得到的序列值,因此每次运算时需要一个不同的种子值。种子值不同,得到的序列值也不同。因此也就是真正的随机数了。
RANDOM产生的是伪随机数或者说是用一种复杂的方法计算得到的序列值,因此每次运算时需要一个不同的种子值。种子值不同,得到的序列值也不同。因此也就是真正的随机数了。这也正是RANDOMIZE随机初始化的作用。 VB里用 NEW RANDOM()来表示初始化。
Q5: python随机种子输出几个整数
python随机种子输出10个整数。python随机种子用于指定随机数生成时所用算法开始的整数值,若使用相同的seed值,则每次生成的随即数都相同,若不设置这个值,则系统根据时间来选择这个值,此时每次生成的随机数因时间差异而不同。
关于python随机函数种子和python随机数种子有什么用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







