・アルゴリズム
kdbの擬似乱数生成アルゴリズムはキャリー付き乗算らしい
https://groups.google.com/forum/#!searchin/personal-kdbplus/Mersenne/personal-kdbplus/_8HIuv6AV-4/UmjaxVrfanoJ
> simon 2008/09/05
>
> this is the one currently used
> http://en.wikipedia.org/wiki/Multiply-with-carry
> no bitwise operations at the moment
>
・使用方法
kwxiki - rand
各atomの0を引数に入れると、そのatomの乱数が生成される
q)rand 0i -2074077848i q)rand each 10#0b 0111000011b q)rand `float$0 / 当然ですがfloatはダメ 0f
0以外の数字を入れると、[0,X)の値が生成される。Xが含まれないのがポイント
q)rand each 5#100 20 77 5 64 49 q)rand each 5#1.0 0.2149847 0.1007832 0.4520411 0.0196153 0.1262957 q)rand each 100#1b / trueが含まれないので全部false 00000000000000000000000000000000000000000000000000000000000000000000000000000..
引数がリストの場合は、リストの要素からランダムに抽出
q)rand `A`B`C `B q)rand each 5#enlist `A`B`C `A`A`C`B`B
"?"でも同様。?がkに近い書き方?
q)10?1.0 0.6598286 0.03947309 0.1404332 0.4545668 0.6829453 0.7773633 0.5704403 0.8341.. q)10?0b 1010011100b q)10?`A`B`C `A`B`C`C`A`B`B`B`B`C
重複なし、ランダムソート(並び替え)
"?"の前にマイナスをつけると、重複なしとなる。これを使えばランダムソートが可能
q)-10?10 / 重複なしでランダムに取得する 9 3 0 1 5 6 8 4 7 2 q) -11?10 / 数が合わないのでエラー 'length q)(neg count x)?x / xのランダムソートになる `B`A`D`C`E q)x -5?5 / indexを乱数で作って取得してもよい `C`D`B`E`A
0 件のコメント:
コメントを投稿