为什么我用Python生成的随机游走在绘图时会得到相同的结果?
嘿,我帮你揪出了问题的根源,咱们一步步搞定它:
问题原因
你每次运行得到完全相同的随机游走结果,核心问题是随机数生成的种子固定:你使用的random()函数默认会采用一个固定的初始随机种子,这导致每次程序启动后生成的随机数序列完全一致,游走路径自然也就一模一样了。
另外你的代码还有两个小问题:
- 第二个循环里的变量名写错了(
numbe...应该是number2),这会直接导致报错 - 重复写了两段几乎完全一样的游走逻辑,既冗余又容易出错;而且
time数组完全没必要用循环生成,效率很低
解决办法
1. 关键:设置动态随机种子
在代码开头添加随机种子的初始化,用当前时间作为种子,这样每次运行程序时都会生成不同的随机数序列:
from pylab import * import time # 用当前时间作为随机种子,保证每次运行的随机序列都不一样 seed(int(time.time()))
2. 优化你的随机游走代码
我们可以把游走逻辑封装成一个函数,避免重复代码,同时简化time数组的生成:
from pylab import * import time # 初始化随机种子 seed(int(time.time())) def generate_random_walk(step_count): # 直接生成时间数组,不用循环逐个赋值 time_sequence = arange(step_count) position = zeros(step_count) for i in range(1, step_count): # 每次直接生成随机数,不用提前单独赋值 if random() >= 0.5: position[i] = position[i-1] + 1 else: position[i] = position[i-1] - 1 return time_sequence, position # 生成两条不同的随机游走路径 total_steps = 10000 time1, pos1 = generate_random_walk(total_steps) time2, pos2 = generate_random_walk(total_steps) # 绘图并添加图例 plot(time1, pos1, label="游走路径1") plot(time2, pos2, label="游走路径2") legend() show()
额外小贴士
- 如果需要复现某次的游走结果(比如调试的时候),可以固定一个种子值,比如
seed(42),这样每次运行都会得到完全一样的路径 - 在同一个程序运行中生成多条不同路径时,不需要重复设置种子,只要调用
random()就会自动生成新的随机数
内容的提问来源于stack exchange,提问作者user490418
相关产品推荐
相关产品推荐

