python - 用 Python 重新创建 RNG

标签 python matlab random

我正在尝试重新创建一个在 Matlab 中使用的乘法同余算法(找到它 here,第 9.2 节,阅读它以了解一些上下文)

基本上,我有 4 个变量

a = 13
c = 0
m = 31

最后一个,我无法将其格式化为代码,因为它破坏了下标:

x0= 1

有了这四个,我想重现这样的东西:

xk+1 = a * xk + c mod m

到目前为止,我已经:

a = 13
c = 0
m = 31
base = 2 # Does not work with 0 for some reason
x = int(x='1', base=base)

for i in range(8):
    rand = a * x + c % m
    base += 1
    x = int(x='1', base=base)  
    print(rand)

我的输出是:

13, 13, 13, 13, 13, 13, 13, 13...

尽管如此,根据文档,应该是:

1, 13, 14, 27, 10, 6, 16, 22...

所以我不确定我是否完全误解了这个问题,或者我想要完成的事情在Python中根本不可能实现,或者我是否只是发疯了,但我迫切需要一些建议。非常感谢任何见解。

最佳答案

看起来问题是公式应该是

xk+1 = (a * xk + c) mod m

文档中并不清楚,但如果您使用 c mod m,则每次都会执行相同的操作 (0mod31)。这一段 python 代码按其应有的方式运行:

a = 13
c = 0
m = 31

x = [1]

for i in range(1, 9):
    x.append( (a * x[i-1] + c)%m )
    print x[i],

13 14 27 10 6 16 22 7

关于python - 用 Python 重新创建 RNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43875638/

相关文章:

java - 非重复随机数数组 Java,for/do/while 循环

python - Pygame拖动背景图片

python - rbindlist相当于Python中R的函数

python - MySQLdb 删除查询 - TypeError : not all arguments converted during string formatting

matlab - 根据用户输入更改 assignin 的 'Var' 函数

c++ - 通过拒绝方法使用 CUDA 生成随机数。性能问题

python - 在Python中循环遍历文件目录

Matlab - 点云数据的曲线拟合

r - R和matlab中的qr函数

python - 从 python 列表中快速、独立随机抽取/样本 - 固定概率,而不是总数