sun*_*ots 1 random clojure clojure-contrib
我为随机游走编写了以下代码,它从{-1,1}中提取随机值.
(defn notahappyfoo [n]
(reverse (butlast (butlast (reverse (interleave (take n (iterate rand (- 0 1)))(take n (iterate rand 1))))))))
Run Code Online (Sandbox Code Playgroud)
但是,代码无法产生令人满意的行走.主要问题源于函数rand.它的下限是0,这迫使我写的尴尬代码.也就是说,函数交错最终导致步行中的狂变,因为值被迫从正变为负.使用此代码很难获得任何连续路径的感觉.
我相信在Clojure中应该有一个优雅的形式来构建这个步行.但我无法将正确的功能拼凑在一起以产生这样的行走.我想要构建的函数的目标包括随机数的下限和上限.在上面的代码中,我强制将区间-1设置为1.将此概括为-a和a将是很好的.此外,如何在-a和具有连续性概念的a之间形成随机实数(浮点)的集合?
你需要一个带有范围的随机函数
(defn myrand [a b]
(+ a (rand (- b a))))
Run Code Online (Sandbox Code Playgroud)
然后,您可以创建序列
(def s (repeatedly #(myrand -1 1)))
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用缩减来获取样本
(take 10 s)
(reductions + (take 10 s))
Run Code Online (Sandbox Code Playgroud)