Python 中的 `random.seed()` 起什么作用?

2025-01-03 08:40:00
admin
原创
92
摘要:问题描述:我对 Python 中的内容有些困惑random.seed()。例如,为什么下面的试验会(持续地)进行它们所做的事情?>>> import random >>> random.seed(9001) >>> random.randint(1, 10...

问题描述:

我对 Python 中的内容有些困惑random.seed()。例如,为什么下面的试验会(持续地)进行它们所做的事情?

>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7

我找不到关于此问题的好的文档。


解决方案 1:

伪随机数生成器通过对某个值执行某种操作来工作。通常,这个值是生成器生成的前一个数字。但是,第一次使用生成器时,没有前一个值。

为伪随机数生成器播种会为其提供第一个“上一个”值。每个种子值将对应于给定随机数生成器的生成值序列。也就是说,如果您提供相同的种子两次,则会得到相同的数字序列两次。

通常,您需要为随机数生成器设定一个值,该值每次执行程序时都会发生变化。例如,当前时间就是一个常用的种子。之所以不会自动发生这种情况,是因为如果您愿意,可以提供一个特定的种子来获取已知的数字序列。

解决方案 2:

所有其他答案似乎都没有解释 random.seed() 的用法。这是一个简单的例子(来源):

import random
random.seed( 3 )
print "Random number with seed 3 : ", random.random() #will generate a random number 
#if you want to use the same random number once again in your program
random.seed( 3 )
random.random()   # same random number as before

解决方案 3:

>>> random.seed(9001)   
>>> random.randint(1, 10)  
1     
>>> random.seed(9001)     
>>> random.randint(1, 10)    
1           
>>> random.seed(9001)          
>>> random.randint(1, 10)                 
1                  
>>> random.seed(9001)         
>>> random.randint(1, 10)          
1     
>>> random.seed(9002)                
>>> random.randint(1, 10)             
3

你试试这个。

假设“random.seed”为随机值生成器(“random.randint()”)提供一个值,该生成器根据此种子生成这些值。随机数的必备属性之一是它们应该是可重现的。当您输入相同的种子时,您会得到相同的随机数模式。这样,您从一开始就可以生成它们。您给出不同的种子 - 它以不同的初始值(高于 3)开始。

给定一个种子,它将一个接一个地生成 1 到 10 之间的随机数。因此,你假设一个种子值对应一组数字。

解决方案 4:

随机数是通过对先前的值进行某些操作而生成的。

如果没有先前值,则自动将当前时间作为先前值。我们可以自行提供此先前值random.seed(x),其中x可以是任何数字或字符串等。

因此random.random()实际上并不是完美的随机数,但可以通过来预测random.seed(x)

import random 
random.seed(45)            #seed=45  
random.random()            #1st rand value=0.2718754143840908
0.2718754143840908  
random.random()            #2nd rand value=0.48802820785090784
0.48802820785090784  
random.seed(45)            # again reasign seed=45  
random.random()
0.2718754143840908         #matching with 1st rand value  
random.random()
0.48802820785090784        #matching with 2nd rand value

因此,生成随机数实际上并不是随机的,因为它依靠算法运行。算法总是根据相同的输入给出相同的输出。这意味着,它取决于种子的值。因此,为了使其更加随机,会自动为 分配时间seed()

解决方案 5:

Seed() can be used for later use ---

Example:
>>> import numpy as np
>>> np.random.seed(12)
>>> np.random.rand(4)
array([0.15416284, 0.7400497 , 0.26331502, 0.53373939])
>>>
>>>
>>> np.random.seed(10)
>>> np.random.rand(4)
array([0.77132064, 0.02075195, 0.63364823, 0.74880388])
>>>
>>>
>>> np.random.seed(12) # When you use same seed as before you will get same random output as before
>>> np.random.rand(4)
array([0.15416284, 0.7400497 , 0.26331502, 0.53373939])
>>>
>>>
>>> np.random.seed(10)
>>> np.random.rand(4)
array([0.77132064, 0.02075195, 0.63364823, 0.74880388])
>>>

解决方案 6:

# Simple Python program to understand random.seed() importance

import random

random.seed(10)

for i in range(5):    
    print(random.randint(1, 100))

多次执行上述程序...

第一次尝试:打印 1 - 100 范围内的 5 个随机整数

第二次尝试:打印与上述执行中出现的相同的 5 个随机数。

第三次尝试:同样

.....很快

解释:每次运行上述程序时,我们都将种子设置为 10,然后随机生成器将其作为参考变量。然后通过执行一些预定义的公式,它会生成一个随机数。

因此,在下一次执行中将种子设置为 10,再次将参考数设置为 10,然后再次开始相同的行为......

一旦我们重置种子值,它就会产生相同的植物。

注意:更改种子值并运行程序,您将看到与前一个不同的随机序列。

解决方案 7:

在这种情况下,随机实际上是伪随机的。给定一个种子,它将生成具有均匀分布的数字。但是使用相同的种子,它每次都会生成相同的数字序列。如果你想改变它,你就必须改变你的种子。很多人喜欢根据当前时间或其他东西生成种子。

解决方案 8:

恕我直言,当您再次使用时,它用于生成相同的随机课程结果random.seed(samedigit)

In [47]: random.randint(7,10)

Out[47]: 9


In [48]: random.randint(7,10)

Out[48]: 9


In [49]: random.randint(7,10)

Out[49]: 7


In [50]: random.randint(7,10)

Out[50]: 10


In [51]: random.seed(5)


In [52]: random.randint(7,10)

Out[52]: 9


In [53]: random.seed(5)


In [54]: random.randint(7,10)

Out[54]: 9

解决方案 9:

在生成一组随机数之前设置seed(x),并使用相同的种子生成同一组随机数。在重现问题时很有用。

>>> from random import *
>>> seed(20)
>>> randint(1,100)
93
>>> randint(1,100)
88
>>> randint(1,100)
99
>>> seed(20)
>>> randint(1,100)
93
>>> randint(1,100)
88
>>> randint(1,100)
99
>>> 

解决方案 10:

这是我的理解。每次我们设置一个种子值时,都会生成一个“标签”或“引用”。下一个 random.function 调用将附加到此“标签”,因此下次调用相同的种子值和 random.function 时,它将为您提供相同的结果。

np.random.seed( 3 )
print(np.random.randn()) # output: 1.7886284734303186

np.random.seed( 3 )
print(np.random.rand()) # different function. output: 0.5507979025745755

np.random.seed( 5 )
print(np.random.rand()) # different seed value. output: 0.22199317108973948

解决方案 11:

random.seed(a, version)在python中用于初始化伪随机数生成器(PRNG)

PRNG 是一种生成近似随机数属性的数字序列的算法。这些随机数可以使用种子值重现。因此,如果您提供种子值,PRNG 将使用种子从任意起始状态开始。

参数a 是种子值。如果 a 值为None,则默认使用当前系统时间。

version一个整数,指定如何将参数转换为整数。默认值为 2。

import random
random.seed(9001)
random.randint(1, 10) #this gives output of 1
# 1

如果你想要重现相同的随机数,那么再次提供相同的种子

random.seed(9001)
random.randint(1, 10) # this will give the same output of 1
# 1

如果你不提供种子,那么它会生成不同的数字,而不是像以前一样是 1

random.randint(1, 10) # this gives 7 without providing seed
# 7

如果你提供的种子与之前不同,那么它会给你一个不同的随机数

random.seed(9002)
random.randint(1, 10) # this gives you 5 not 1
# 5

所以,总而言之,如果你想要重现相同的随机数,请提供种子。具体来说,就是相同的种子

解决方案 12:

这是一个小测试,表明向seed()方法提供相同的参数将导致相同的伪随机结果:

# testing random.seed()

import random

def equalityCheck(l):
    state=None
    x=l[0]
    for i in l:
        if i!=x:
            state=False
            break
        else:
            state=True
    return state


l=[]

for i in range(1000):
    random.seed(10)
    l.append(random.random())

print "All elements in l are equal?",equalityCheck(l)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用