【发布时间】:2021-05-17 21:11:19
【问题描述】:
在 Python 中使用random 库时,我可以做到以下几点
>>> import random
>>> random.seed("twenty five")
但如果我使用 NumPy 生成随机数,我无法使用字符串设置种子
>>> import numpy as np
>>> np.random.seed("twenty five")
Traceback (most recent call last):
File "_mt19937.pyx", line 178, in numpy.random._mt19937.MT19937._legacy_seeding
TypeError: 'str' object cannot be interpreted as an integer
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "mtrand.pyx", line 244, in numpy.random.mtrand.RandomState.seed
File "_mt19937.pyx", line 166, in numpy.random._mt19937.MT19937._legacy_seeding
File "_mt19937.pyx", line 186, in numpy.random._mt19937.MT19937._legacy_seeding
TypeError: Cannot cast scalar from dtype('<U11') to dtype('int64') according to the rule 'safe'
NumPy 是否可以接受字符串作为种子?
如果没有,是否有正确方法将字符串转换为 int 以在 NumPy 中设置种子?
random 库的seed 函数背后的机制是什么使它能够接受字符串种子?
【问题讨论】:
-
你为什么要关心?您无法保证
numpy.random和 Python 的random使用相同的算法。 -
因为我很好奇,我想使用 NumPy 和一个字符串作为种子
-
毫无意义。如果您使用的是基本种子,则任何整数都与其他整数一样好。记住,你有源代码——你可以去看看
random.seed做了什么。 -
@TimRoberts 我仍然觉得很有趣,知道
random库最适合将字符串转换为整数以保持输入空间相对相似。此外,我认为我不应该用我关心的原因来证明我在堆栈溢出上发布的每个问题都是合理的,但我可能错了 -
当有人专注于错误的事情时,我并不过分指出。随机数种子的确切值根本没有意义。没有种子比另一个更好或“更随机”。
seed(1)产生与seed(2)完全不同(且有效)的序列。因此,没有用于翻译字符串的“最佳”算法。使用第一个字符的 ASCII 值会很好。