2

100 件のレコードがあり、日付をモックアウトしてcreated_at曲線に合わせたいとします。それを行うためのライブラリはありますか、またはどの式を使用できますか? これは同じ道に沿っていると思います:

確率分布による乱数の生成

それらが数学でどのように分類されているかについてはよくわかりませんが、次のようなものを見ています。

  • 釣鐘曲線
  • 対数 (典型的な生物学/進化) 曲線? ...

コードでいくつかの数式を探しているので、これを言うことができます:

  • 100 レコード、1.week期間 、間隔 が与えられた場合12.hours
  • created_atおおまかに収まるように各レコードに設定しますcurve

本当にありがとう!

アップデート

ruby アルゴリズムに関するこのフォーラムの投稿を見つけて、R/Ruby ブリッジであるrsrubyにたどり着きましたが、それは多すぎるように思えます。

更新 2

gslライブラリを試して、そこにたどり着くために、この小さなスニペットを書きました...

created_at が統計分布に沿っている Rails でテスト データを生成する

4

4 に答える 4

4

私は最近、さまざまな統計分布に従って数値を生成することを目的とした ruby​​ gem であるcroupierに出会いました。

私はまだ試していませんが、非常に有望に思えます。

于 2012-09-27T07:18:03.857 に答える
3

実際には単なる整数である UNIX タイムスタンプを生成できます。まず、いつ開始するかを決めます。たとえば、今:

start = DateTime::now().to_time.to_i

インターバルの終了がいつになるかを調べます (たとえば、1 週間後)。

finish = (DateTime::now()+1.week).to_time.to_i

Ruby はこのアルゴリズムを使用して乱数を生成します。ほぼ均一です。次に、2 つの間の乱数を生成します。

r = Random.new.rand(start..finish)

次に、それを日付に戻します。

d = Time.at(r)

これも有望に見えます: http://rb-gsl.rubyforge.org/files/rdoc/randist_rdoc.html

そしてこれも: http://rb-gsl.rubyforge.org/files/rdoc/rng_rdoc.html

于 2010-12-29T01:06:42.483 に答える
0

別のオプションは、SciRubyの下にあるDistribution gemです。次の方法で通常の数値を生成できます。

require 'distribution'

rng = Distribution::Normal.rng
random_numbers = Array.new(100).map { rng.call }

他のさまざまなディストリビューション用の RNG もあります。

于 2015-05-28T21:26:01.853 に答える
0

ウィキから:

確率密度関数に基づいて乱数を生成するには、いくつかの方法があります。これらの方法には、何らかの方法で一様乱数を変換することが含まれます。このため、これらの方法は、疑似乱数と真の乱数の両方を生成する際に同様に機能します。

インバージョン法と呼ばれる 1 つの方法では、乱数 (適切な分布のために 0 から 1 の間で生成する必要があります) 以上の面積まで積分します。

受け入れ拒否法と呼ばれる 2 番目の方法で は、x と y の値を選択し、x の関数が y の値より大きいかどうかをテストします。そうであれば、x 値が受け入れられます。それ以外の場合、x 値は拒否され、アルゴリズムは再試行します。

最初の方法は、SO リンクされた質問の受け入れられた回答で使用される方法です:確率分布で乱数を生成する

于 2010-12-29T01:06:56.977 に答える