ブックマーク / ameblo.jp/316228 (1)

  • 『重みをつけてランダムに選択する方法』

    d = {0: 48, 1: 13, 2: 6, 3: 61, 4: 14, 5: 8, 6: 4, 7: 41, 8: 84, 9: 50} というようなdictオブジェクトから、d[k] の大きさに応じてランダムに選択する処理を考えていました。 たとえば d[0] = 48 d[5] = 8 なので、"0" は "5" の6倍(= 48/8 )の確率で選択されるようにしたいです。 普通、真っ先に思いつくのは、こんな処理でしょう。 def choice(d): s = 0 for k, v in d.items(): s += v rnd = random.randrange(s) for k, v in d.items(): s += v if rand < s: return k dを一旦全部読み込んで d[k] の和をとってから、乱数を発生させて また d を最初から読んでいって、

    『重みをつけてランダムに選択する方法』
    ma-aqua
    ma-aqua 2016/06/15
  • 1