gpt4 book ai didi

python - 组合线性同余发生器

转载 作者:行者123 更新时间:2023-12-01 08:33:55 24 4
gpt4 key购买 nike

我正在尝试使用“组合线性同余生成器”生成 10 个伪随机数。 “组合线性同余发生器”的必要步骤如下:

enter image description here

因此,我的上述步骤的代码如下:

import random as rnd

def combined_linear_cong(n = 10):

R = []

m1 = 2147483563
a1 = 40014
m2 = 2147483399
a2 = 40692

Y1 = rnd.randint(1, m1 - 1)
Y2 = rnd.randint(1, m2 - 1)

for i in range (1, n):

Y1 = a1 * Y1 % m1
Y2 = a2 * Y2 % m2

X = (Y1 - Y2) % (m1 - 1)

if (X > 0):
R[i] = (X / m1)
elif (X < 0):
R[i] = (X / m1) + 1
elif (X == 0):
R[i] = (m1 - 1) / m1

return (R)

但是我的代码无法正常工作。我是Python新手。如果有人帮助我修复代码,那就太好了。或者给我一些指导,以便我可以修复它。

最佳答案

脚本存在一些问题:

  1. 您正在为 r[i] 赋值,但此时列表为空;你应该初始化它以便能够像这样向它写入值; (例如)r = [0.0] * n
  2. 您在括号中返回 r,也许是因为您期望结果是一个元组?如果是这样,返回 tuple(r),否则您可以去掉括号,只返回 r
  3. 描述表明 x[i+1] 应该是 (y[i+1,1] - y[i+1,2]) mod m1,但你正在做 X = (Y1 - Y2) % (m1 - 1),这可能是一个错误,但我对算法不太了解,无法判断哪个是正确的。
  4. 这不是一个错误,但它使查找警告之间的错误变得更加困难:您不遵循 Python 命名约定;您应该使用小写字母作为变量名称,并且可以稍微清理一下间距。

考虑到所有这些问题,我认为这是一个正确的实现:

import random as rnd


def combined_linear_cong(n = 10):
r = [0.0] * n

m1 = 2147483563
a1 = 40014
m2 = 2147483399
a2 = 40692

y1 = rnd.randint(1, m1 - 1)
y2 = rnd.randint(1, m2 - 1)

for i in range(1, n):

y1 = a1 * y1 % m1
y2 = a2 * y2 % m2

x = (y1 - y2) % m1

if x > 0:
r[i] = (x / m1)
elif x < 0:
r[i] = (x / m1) + 1
elif x == 0:
r[i] = (m1 - 1) / m1

return r


print(combined_linear_cong())

注意:elif x == 0:是多余的,您也可以编写else:,因为此时,x不能是 0 以外的任何内容。

关于python - 组合线性同余发生器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53808559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com