6

「A」、「B」、「C」の 3 つのラベルがあります。

100 個の要素を持つランダムなリストを生成したいのですが、その 60% が "A"、30% が "B"、10% が "C" です。

これどうやってするの?(私はpythonが初めてです。この質問がばかげていないことを願っています。)


編集: 私の質問はこの質問とは少し異なります: 与えられた (数値) 分布で乱数を生成する

コメントのように、正確に 60% を「A」にしたいのですが、すべての要素が 60% の確率で「A」になるわけではありません。したがって、 numpy.random.choice() は私にとって解決策ではありません。

4

3 に答える 3

3

分布が均一でなければならない場合、A は平均して 60% のケースで発生し、その他の値はそのようになります。

import random
res = []
for i in range(0, n_samples):
   r = random.random()
   if(r<=0.6): res.append(A)
   elif(r>0.7): res.append(B)
   elif(r>0.6 and r<=0.7): res.append(C)
于 2015-03-22T01:11:49.300 に答える
3

正確に60% を A、30% を B、10% を C にする必要があり、合計で 100 個の要素が必要であることがわかっている場合は、次のようにすることができます。

import random

num = 100
prob_a = 0.6
prob_b = 0.3
prob_c = 0.1

As = int(num*prob_a) * 'A'
Bs = int(num*prob_b) * 'B'
Cs = int(num*prob_c) * 'C'

# create a list with 60 As, 30 Bs, and 10 Cs
chars = list(As + Bs + Cs)
random.shuffle(chars)

print("".join(chars))

それは次のようなものを出力しますBAAAAABBCBAABABAAAACAABBAABACAACBAACBBBAAACBAAAABAAABABAAAAABBBABAABAABAACCAABABAAAAAACABBBBCABAAAAA

于 2015-03-22T01:18:51.440 に答える