合計を表す数字があるとします。つまり、123,456,789としましょう。numpy - 数値を指定すると、ファジー重み付きの合計数を見つけます
ここで、その数になるがファジー重みを持つ数を生成したいとします。
たとえば、3つの数字を生成したいとします。最初は、合計の約60%であるべきですが、少しのばらつきがあります。 2番目の値は合計値の30%になるはずです。そして、3番目のものは他の2つに応じて約10%になります。
私は、このようにそれをやってみました:
percentages = [0.6, 0.3]
total = 123456789
still_need = total
values = []
for i in range(2):
x = int(total * (percentages[i] + np.random.normal(scale=0.05)))
values.append(x)
still_need = still_need - x
values.append(still_need)
しかし、それは非常にエレガントないないようです。
良い方法がありますか?それを行うには
'np.random.multinomial'は基本機能を123,456,789回呼び出しますか?私は '%timeit'を実行しましたが、それは非常に高速です。 – jawns317
ほとんど確かではありません。幸いにも、多項式乱数を生成する効率的な方法があります。私はNumPyが何を使用しているのか分かりません。しかし、例えば、Devroye(1986)「非一様乱数生成」を参照してください。彼は、多項式乱数を生成する方法を、二項乱数列(生成するのが速い)として示しています。この方法での1回の描画では、d面のダイに対してO(d)時間がかかります。 – user20160