確率の負の対数の合計がおよそ 1 になるようにグループ化された項目のグループのリストを作成する必要があります。
これまでのところ、私は思いついた
probs = np.random.dirichlet(np.ones(50)*100.,size=1).tolist()
logs = [-1 * math.log(1-x,2) for x in probs[0]]
zipped = zip(range(0,50), logs)
for key, igroup in iter.groupby(zipped, lambda x: x[1] < 1):
print(list(igroup))
つまり、乱数のリストを作成し、それらの負の対数を取り、これらの確率を項目番号と一緒に圧縮します。
次に、タプルの 2 列目の数値を合計が 1 (またはその少し上) になるまで加算して、グループを作成します。
私はもう試した:
for key, igroup in iter.groupby(zipped, lambda x: x[1]):
for thing in igroup:
print(list(iter.takewhile(lambda x: x < 1, iter.accumulate(igroup))))
および itertools.accmuluate の使用に関する他のさまざまなバリエーションですが、動作させることができません。
誰が何がうまくいかないのか考えていますか (私はあまりにも多くの仕事をしていると思います)。
理想的には、出力は次のようになります
groups = [[1,2,3], [4,5], [6,7,8,9]]
など、つまり、これらはこのプロパティを満たすグループです。