Вы можете использовать Ведун sample-normal
для генерации (без перекошенных) нормально распределенных чисел. Например, это будет генерировать 20 нормально распределенных значений со средним значением 2 и стандартное отклонение 5:
(ns foo
(:use [incanter.stats]))
(sample-normal 20 :mean 2 :sd 5)
Можно также использовать Random
или генератора в Java лучше случайных чисел в Java, такие как Шон Люк MersenneTwisterFast
. Например, для использования MersenneTwisterFast
загрузите исходный файл java и поместите его, например. в src/java в дереве проекта Leiningen. Затем добавьте строку типа :java-source-paths ["src/java"]
в project.clj.В исходном файле Clojure:
(ns foo
(:import [ec.util MersenneTwisterFast]))
(defn make-rng
"Make an instance of a MersenneTwisterFast RNG and flush out its initial
minimal lack of entropy."
[seed]
(let [rng (MersenneTwisterFast. seed)]
(dotimes [_ 1500] (.nextInt rng)) ; needed because of a quirk of Mersenne Twisters
rng))
(def my-rng (make-rng 42))
;; Now call this as many times as you want to generate standard Normal data:
(.nextGaussian my-rng)
Использование в Java Random
похоже, без загрузки и перехода к SRC/Java и т.д., но я не думаю, что вам нужно промывать в Java Random
с 1500 .nextInt
s (хотя ваши случайные числа могут быть не такими случайными, как у Mersenne Twister).
Как объясняется this answer в stats.SE, вы можете получить произвольное нормальное распределение из стандартного нормального распределения, умножив значение выше на требуемое стандартное отклонение и затем добавив желаемое среднее значение.
Ответ Алана Томпсона объясняет, как производить усеченное распределение из обычного нормального распределения.
This answer at stats.SE дает рекомендации относительно создания перекошенного нормального распределения из нормального распределения.
fwiw, «rand» Clojure основан на Java «Random», поэтому, если последний не является достаточно высококачественным генератором случайных чисел для данного использования, тогда и rand' тоже не будет. Однако для многих ситуаций это достаточно хорошо. – Mars