试图通过命令行选项输入种子运行时,因此想了解numpy.rand.seed()的数据类型是什么
答案 0 :(得分:0)
根据https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.seed.html,它必须是整数或可转换为无符号32位整数的一维整数数组。因此,使用任何类型的整数都应该没问题。
答案 1 :(得分:0)
来自numpy docs on np.random.seed()
:
seed : int or 1-d array_like, optional
Seed for RandomState. Must be convertible to 32 bit unsigned integers.
请注意当您尝试使用某些对象(例如字符串)时收到的错误消息:
In [5]: np.random.seed('1234')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
mtrand.pyx in mtrand.RandomState.seed()
TypeError: 'str' object cannot be interpreted as an integer
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
<ipython-input-5-d50c476bf3fe> in <module>
----> 1 np.random.seed('1234')
mtrand.pyx in mtrand.RandomState.seed()
TypeError: Cannot cast array from dtype('<U4') to dtype('int64') according to the rule 'safe'
因此,您必须传递可以通过“安全”转换进行转换的对象。据我所知,一种简单的检查方法是使用np.can_cast(o, np.uint32)
(文档here);返回True
的任何内容都可以使用。但是,实际检查的内容可以在源代码here中看到,在该代码中,它使用安全转换将输入对象转换为类型为np.int64
的数组,然后检查该对象是否为1-d并且值在0到2 ^ 32-1之间,然后转换为无符号长整数以用于numpy C库。
因此,单线描述可能是:任何可以“安全地强制转换为1-d int64
数组,其中值在转换后最终介于0到2 ^ 32-1之间”的任何东西都可以传递到{{ 1}}。