为什么 numpy RandomState 会给出不同的结果?
Why does numpy RandomState gives different results?
我不明白为什么
import numpy as np
rng = np.random.RandomState(42)
rng.randint(10, size=1)
np.random.RandomState(rng.randint(10, size=1)).randint(10, size=3)
>>> OUTPUT: array([8, 9, 3])
和
import numpy as np
np.random.RandomState(42).randint(10, size=1)
np.random.RandomState(np.random.RandomState(42).randint(10, size=1)).randint(10,size=3)
>>> OUTPUT: array([9, 3, 4])
有人可以解释一下区别吗?
阅读前请注意:请注意以下所有“随机”一词的实例均表示“伪随机”。
简单的答案是因为您对不同的调用和后续操作使用不同的种子。
在您提供的示例中
import numpy as np
rng = np.random.RandomState(42)
rng.randint(10, size=1) # This is the first time you are asking 'rng' for 'randint()' with seed 42 which will return 6. First Random Number.
np.random.RandomState(rng.randint(10, size=1)).randint(10, size=3) # This is the second time you are asking the same 'rng' for 'randint()' with seed 42 which will return 3. Second Random Number.
在您提供的第二个示例中,
import numpy as np
np.random.RandomState(42).randint(10, size=1) # this is the first np.random.RandomState(42).randint(), which is 6, same as above
np.random.RandomState(np.random.RandomState(42).randint(10, size=1)).randint(10,size=3) # this is still the first np.random.RandomState(42).randint() , which is 6 again, but it was 3 above
文档中声明的兼容性保证是这样的:
Compatibility Guarantee
使用固定种子的固定位生成器和使用相同参数对“RandomState”方法的一系列固定调用将始终产生相同的结果直至出现舍入误差,除非值不正确。 RandomState 被有效地冻结,并且只会接收 Numpy 内部变化所需的更新。为 Generator 保留更多实质性更改,包括算法改进。
表示当你使用相同的种子时,会提供相同系列的数字,即np.random.RandomState(42)
的构造函数初始化后的第一个随机数总是6,第二个随机数总是只要您请求一个随机值,就为 3。
通过运行验证。
import numpy as np
rng = np.random.RandomState(42)
print(rng.randint(10, size=1)) # output is always [6]
print(rng.randint(10, size=1)) # output is always [3]
我希望这能回答你的问题。
我不明白为什么
import numpy as np
rng = np.random.RandomState(42)
rng.randint(10, size=1)
np.random.RandomState(rng.randint(10, size=1)).randint(10, size=3)
>>> OUTPUT: array([8, 9, 3])
和
import numpy as np
np.random.RandomState(42).randint(10, size=1)
np.random.RandomState(np.random.RandomState(42).randint(10, size=1)).randint(10,size=3)
>>> OUTPUT: array([9, 3, 4])
有人可以解释一下区别吗?
阅读前请注意:请注意以下所有“随机”一词的实例均表示“伪随机”。
简单的答案是因为您对不同的调用和后续操作使用不同的种子。
在您提供的示例中
import numpy as np
rng = np.random.RandomState(42)
rng.randint(10, size=1) # This is the first time you are asking 'rng' for 'randint()' with seed 42 which will return 6. First Random Number.
np.random.RandomState(rng.randint(10, size=1)).randint(10, size=3) # This is the second time you are asking the same 'rng' for 'randint()' with seed 42 which will return 3. Second Random Number.
在您提供的第二个示例中,
import numpy as np
np.random.RandomState(42).randint(10, size=1) # this is the first np.random.RandomState(42).randint(), which is 6, same as above
np.random.RandomState(np.random.RandomState(42).randint(10, size=1)).randint(10,size=3) # this is still the first np.random.RandomState(42).randint() , which is 6 again, but it was 3 above
文档中声明的兼容性保证是这样的:
Compatibility Guarantee
使用固定种子的固定位生成器和使用相同参数对“RandomState”方法的一系列固定调用将始终产生相同的结果直至出现舍入误差,除非值不正确。 RandomState 被有效地冻结,并且只会接收 Numpy 内部变化所需的更新。为 Generator 保留更多实质性更改,包括算法改进。
表示当你使用相同的种子时,会提供相同系列的数字,即np.random.RandomState(42)
的构造函数初始化后的第一个随机数总是6,第二个随机数总是只要您请求一个随机值,就为 3。
通过运行验证。
import numpy as np
rng = np.random.RandomState(42)
print(rng.randint(10, size=1)) # output is always [6]
print(rng.randint(10, size=1)) # output is always [3]
我希望这能回答你的问题。