numpy 的 RandomState 和 seed 的用法

本文探讨了`np.random.RandomState`和`np.random.seed`在生成伪随机数时的区别。虽然两者都能设置随机数生成的起点,但在循环中使用时,必须在每次迭代中重新设定种子以获取相同结果。不重新设定种子会导致每次循环生成不同的随机数序列。通过示例代码展示了如何在循环中正确使用它们以确保重复性。
摘要由CSDN通过智能技术生成

问题一:np.random.RandomState 和 np.random.seed 有什么区别?

本质没区别,只是语法上的区别。

import numpy as np

rng = np.random.RandomState(0)
for i in range(3):
    print(rng.randn(2))

print()

np.random.seed(0)
for i in range(3):
    print(np.random.randn(2))

得到输出结果完全一样,证明两个方法完全一样,只是在语法上有所区别。

[1.76405235 0.40015721]
[0.97873798 2.2408932 ]
[ 1.86755799 -0.97727788]

[1.76405235 0.40015721]
[0.97873798 2.2408932 ]
[ 1.86755799 -0.97727788]

问题二:循环使用上述伪随机代码为什么会得到不同的结果?例如第一次循环得到

[1.76405235 0.40015721]

再次循环得到

[0.97873798 2.2408932 ]

这两个是完全不同的结果。不是说伪随机都会得到相同的结果吗?

后来我发现,无论是np.random.RandomState 还是 np.random.seed,使用过一次之后就需要重新再复述一遍才能得到一样的结果。也就是说要想得到每次循环里的结果一样,需要把随机种子的声明也写入循环里面。

for i in range(3):
    rng = np.random.RandomState(0)
    print(rng.randn(2))

print()

for i in range(3):
    np.random.seed(0)
    print(np.random.randn(2))

得到结果完全一样

[1.76405235 0.40015721]
[1.76405235 0.40015721]
[1.76405235 0.40015721]

[1.76405235 0.40015721]
[1.76405235 0.40015721]
[1.76405235 0.40015721]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值