Python:如何修复我绘制的“随机”值s.t.函数调用是否一致?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:如何修复我绘制的“随机”值s.t.函数调用是否一致?相关的知识,希望对你有一定的参考价值。

我有:

np.random.seed(123)
var_v = 0.007 ** 2
T = 100
rho   = 0.9

def v_t(var_v, T):
    v_t_ = np.zeros([T,1])
    v_t_[1:T] = (var_v ** 0.5) * np.random.randn(len(v_t_) - 1, 1)
    return v_t_

def s_t(rho, T):
    v_t_ = v_t(var_v, T)
    s_t_ = np.zeros([T,1])
    s_t_[0] = 0
    for t in range(1,T):
        s_t_[t] = rho *s_t_[t-1] + v_t_[t]
    return s_t_

但每次我调用其中一个值,即

s_t(rho, T)“或”v_t(var_v, T)

显示正确的值。但是直接之后,当我调用另一个值时,值是错误的。清除命名空间后,当我调用镜像序列中的函数时,同样适用。

我怀疑这是因为np.random.randn绘制了新值。如何轻松修复绘制的值s.t.我得到正确的价值观呼吁s_tv_t

答案

如果要确保一致性,则每次绘制随机数时都需要设置种子。以下小例子将说明:

np.random.seed(123)
np.random.randn(4, 1)
np.random.randn(4, 1)

输出不同:

array([[-1.0856306 ],
       [ 0.99734545],
       [ 0.2829785 ],
       [-1.50629471]])

array([[-0.57860025],
       [ 1.65143654],
       [-2.42667924],
       [-0.42891263]])

然后尝试:

np.random.seed(123)
np.random.randn(4, 1)
np.random.seed(123)
np.random.randn(4, 1)

输出是相同的:

array([[-1.0856306 ],
       [ 0.99734545],
       [ 0.2829785 ],
       [-1.50629471]])

array([[-1.0856306 ],
       [ 0.99734545],
       [ 0.2829785 ],
       [-1.50629471]])

因此,在您的情况下,您可以在每次调用np.random.randn之前在函数内设置种子。

以上是关于Python:如何修复我绘制的“随机”值s.t.函数调用是否一致?的主要内容,如果未能解决你的问题,请参考以下文章

从数组中选择不相等的随机整数(python)

加速器在 Python Tkinter 中不起作用:如何修复 [重复]

如何绘制最佳参数对应的随机森林树

统计学入门级:常见概率分布+python绘制分布图

根据随机 CGFloat 值重新绘制 UIBezierPath

如何使用 python 数据修复翻转