我在stackoverflow上搜索过面临类似问题的人,这个主题Replicating MATLAB's randperm
in NumPy是最相似的。
然而,尽管可以在Python中使用numpy random permutation从Matlab中重新创建randperm函数的行为,但生成的数字并不相同,即使我为两种语言选择了相同的种子生成器。我有点困惑,因为我的测试与Matlab和Python之间的其他随机函数相关。
以下是我尝试过的:
MATLAB
rng(42);
randperm(15)
它返回
ans =
11 7 6 5 15 14 1 4 9 10 3 13 8 2 12
Python
np.random.seed(42)
print(np.random.permutation(range(1,16)))
它返回
[10 12 1 14 6 9 3 2 15 5 8 11 13 4 7]
我怎样才能改变我的Python代码,使它可以重现与Matlab相同的随机数顺序?
1条答案
按热度按时间gajydyqb1#
看起来Matlab和Numpy默认使用相同的随机数生成器,差异是由于两种语言中
randperm
的内部工作方式不同造成的。在旧的Matlab版本中,
randperm
的工作方式是生成一个随机数组,并输出使数组排序的索引(使用sort
的第二个输出)。在更现代的Matlab版本中(我使用的是R2017b),randperm
是一个内置函数,因此无法看到源代码,但它似乎使用了相同的方法:因此,如果两种语言中的随机数生成器实际上是相同的,那么您可以通过使用
argsort
定义自己的randperm
版本来在Numpy中复制这种行为:然而,请注意,依赖于两种语言中相同的随机数生成器是有风险的,并且可能依赖于版本。