당신은 (비 기울어) 정규 분포 번호를 생성하기 위해 주문 술사의 sample-normal
를 사용할 수 있습니다. 예를 들어,이 평균 2, 표준 편차 5 20 개 정규 분포 값을 생성합니다
(ns foo
(:use [incanter.stats]))
(sample-normal 20 :mean 2 :sd 5)
당신은 또한 숀 누가 복음의 MersenneTwisterFast
으로 자바에서 자바의 Random
또는 더 나은 난수 생성기를 사용할 수 있습니다. 예를 들어 MersenneTwisterFast
을 사용하려면 자바 소스 파일을 다운로드하고 예를 들어 Leiningen 프로젝트 트리의 src/java에 있습니다. 그런 다음 행을 :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)
은 다운로드하지 않고, 자바의 Random
이 비슷합니다 사용 등 SRC/자바, 이동,하지만 난 당신이 1500 .nextInt
자바의 Random
를 세척해야합니다 생각하지 않습니다 (임의의 숫자는 메르 센 트위스터의 임의의 숫자와 같지 않을 수도 있지만).
stats.SE에서 설명한 this answer에 따르면 설명 된 표준 편차로 위의 값을 곱한 다음 원하는 평균을 더하여 표준 정규 분포에서 임의의 정규 분포를 얻을 수 있습니다.
Alan Thompson의 대답은 일반 정규 분포에서 잘린 분포를 생성하는 방법을 설명합니다.
This answer (stats.SE)은 정규 분포에서 비뚤어진 정규 분포를 생성하는 것과 관련된 조언을 제공합니다.
fwiw, Clojure의'rand'는 Java의'Random'에 기초합니다. 따라서 후자가 주어진 용도에 대해 충분히 높은 품질의 난수 생성기가 아니면'rand'도 아닙니다. 그러나 많은 상황에서 충분히 좋습니다. – Mars