np.random.permutation 带种子?

问题描述 投票:0回答:4

我想使用带有

np.random.permutation
的种子,例如

np.random.permutation(10, seed=42)

我收到以下错误:

"permutation() takes no keyword arguments"

我还能怎样做呢?谢谢。

python numpy random permutation
4个回答
63
投票

如果您希望将其放在一行中,您可以创建一个新的

RandomState
,并在其上调用
permutation

np.random.RandomState(seed=42).permutation(10)

这比仅仅设置

np.random
的种子更好,因为它只会产生局部效果。

NumPy 1.16 更新:

RandomState
现在被认为是遗留功能。我没有看到任何迹象表明它很快就会被弃用,但现在生成可重复随机数的推荐方法是通过随机生成器,其中默认值可以像这样实例化:

np.random.default_rng(seed=42).permutation(10)

请注意,对于该生成器,似乎无法保证不同版本的 NumPy 之间的比特流等效性,而对于

RandomState
,文档指出 “此生成器被视为冻结,不会有进一步的改进。它保证生成与 NumPy v1.16 最终版本的值相同。”


33
投票
np.random.seed(42)
np.random.permutation(10)

如果您想多次调用

np.random.permutation(10)
并获得相同的结果,则每次调用
np.random.seed(42)
时也需要调用
permutation()


举个例子,

np.random.seed(42)
print(np.random.permutation(10))
print(np.random.permutation(10))

会产生不同的结果:

[8 1 5 0 7 2 9 4 3 6]
[0 1 8 5 3 4 7 9 6 2]

同时

np.random.seed(42)
print(np.random.permutation(10))
np.random.seed(42)
print(np.random.permutation(10))

将给出相同的输出:

[8 1 5 0 7 2 9 4 3 6]
[8 1 5 0 7 2 9 4 3 6]

4
投票

在上一行设置种子

np.random.seed(42)
np.random.permutation(10)

1
投票

您可以将其分解为:

import numpy as np
np.random.seed(10)
np.random.permutation(10)

通过首先初始化随机种子,这将保证您获得相同的排列。

© www.soinside.com 2019 - 2024. All rights reserved.