random.seed()的作用(python)

本文探讨了在Python中使用numpy库的random模块时,如何通过设置seed来控制随机数生成的可预测性。详细解释了当seed值相同时,无论运行多少次,生成的随机数都是相同的;而当seed值不同时,生成的随机数则会不同。此外,还展示了不设置seed时,每次运行将生成不同的随机数。

random.seed(1)作用:使得随机数据可预测,即只要seed的值一样,后续生成的随机数都一样。
当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数

设置seed()且seed的值一样—生成的随机数相同

import numpy as np
np.random.seed(2)
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
print(syn0)
print(syn1)

运行多次结果都是一样的:

#######第一次运行结果##########
[[-0.1280102  -0.94814754  0.09932496 -0.12935521]
 [-0.1592644  -0.33933036 -0.59070273  0.23854193]
 [-0.40069065 -0.46634545  0.24226767  0.05828419]]
[[-0.73084011]
 [ 0.02715624]
 [-0.63112027]
 [ 0.5706703 ]]
#######第二次运行结果##########
[[-0.1280102  -0.94814754  0.09932496 -0.12935521]
 [-0.1592644  -0.33933036 -0.59070273  0.23854193]
 [-0.40069065 -0.46634545  0.24226767  0.05828419]]
[[-0.73084011]
 [ 0.02715624]
 [-0.63112027]
 [ 0.5706703 ]]

设置seed()且seed的值不一样—生成的随机数不同

当seed值为2时
import numpy as np
np.random.seed(2)
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
print(syn0)
print(syn1)

结果:

[[-0.1280102  -0.94814754  0.09932496 -0.12935521]
 [-0.1592644  -0.33933036 -0.59070273  0.23854193]
 [-0.40069065 -0.46634545  0.24226767  0.05828419]]
[[-0.73084011]
 [ 0.02715624]
 [-0.63112027]
 [ 0.5706703 ]]
当seed的值为0时
import numpy as np
np.random.seed(0)
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
print(syn0)
print(syn1)

结果:

[[ 0.09762701  0.43037873  0.20552675  0.08976637]
 [-0.1526904   0.29178823 -0.12482558  0.783546  ]
 [ 0.92732552 -0.23311696  0.58345008  0.05778984]]
[[ 0.13608912]
 [ 0.85119328]
 [-0.85792788]
 [-0.8257414 ]]

当不设置seed时—生成的随机数不同

import numpy as np
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
print(syn0)
print(syn1)

结果:

#######第一次运行结果##########
[[ 0.63051603 -0.87816765  0.90623517  0.47393602]
 [-0.5947253   0.39207476 -0.701234   -0.63498633]
 [-0.99398242 -0.94448909 -0.38235113 -0.41548786]]
[[-0.97505187]
 [-0.89961779]
 [ 0.81003048]
 [ 0.54686106]]
#######第二次运行结果##########
[[-0.49437935  0.77174974  0.92061198 -0.99606444]
 [-0.48872823  0.3233608  -0.50048627 -0.53339642]
 [-0.7347141   0.30212213 -0.78579018 -0.68301276]]
[[ 0.72968294]
 [ 0.11085167]
 [ 0.34996692]
 [-0.48830381]]
### Python `random.seed` 和 NumPy `np.random.seed` 的区别及用法 #### Python内置模块中的随机种子设置 在Python的标准库中,`random.seed()`用于初始化伪随机数生成器的状态。这使得每次运行程序时可以得到相同的随机序列,只要提供了相同的种子值。 ```python import random random.seed(42) # 设置种子为42 print(random.randint(0, 10)) ``` 此方法影响的是整个Python环境中基于`random`模块产生的所有类型的随机数值,包括整数、浮点数以及从列表或其他容器类型中抽取元素的操作[^3]。 #### 使用NumPy进行随机种子设定 对于NumPy而言,`np.random.seed()`同样用来控制随机数生成过程中的可重复性。然而,它仅作用于由NumPy提供的函数所创建的随机数组或单个随机数上。 ```python import numpy as np np.random.seed(42) # 设定NumPy的随机种子也为42 print(np.random.rand()) # 输出介于[0., 1.)之间的均匀分布随机样本 ``` 值得注意的是,在较新的版本中,推荐使用更灵活的方式通过`Generator`对象来管理状态: ```python rng = np.random.default_rng(seed=42) print(rng.uniform()) ``` 这种方式不仅限定了范围内的随机数生成,还支持更多种类的概率分布采样功能,并且具有更好的线程安全性特性[^1]。 当在同一项目里同时调用了来自不同包下的随机操作(比如既有纯Python也有NumPy),则需要分别针对各自使用的库单独指定相应的seed参数以确保结果的一致性和再现性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值