Генерация случайных чисел с ограничениями - PullRequest
6 голосов
/ 12 октября 2011

Мне нужно сгенерировать 500 чисел, 250 1 и 250 0, расположенных в случайном порядке.Ниже то, что я делаю сейчас.Но он не чувствует себя хорошо, пока вывод правильный.

trialNo=500

RandomSample@Flatten[Table[#, {trialNo/2}] & /@ {0, 1}]

Ответы [ 2 ]

6 голосов
/ 12 октября 2011

Я бы на самом деле сделал что-то немного другое.Поскольку вы ищете случайную перестановку Flatten[{ConstantArray[0,250], ConstantArray[1,250]}], я бы сгенерировал перестановку и использовал бы Part, чтобы получить список, который вы ищете.Как следует,

perm = RandomSample[Range[trialNo]];
Flatten[{ConstantArray[0, trialNo/2], ConstantArray[1, trialNo/2]}][[ perm ]]

Это не отличается от того, что вы делаете, но я думаю, что это математически отражает то, что вы пытаетесь достичь лучше.

3 голосов
/ 14 октября 2011

Вот еще один способ сделать это.

Round[Ordering[1~RandomReal~#] / N@#]& @ 500

Теперь с большим количеством магии для парней в чате.

Mod[RandomSample@Range@#, 2] & @ 500
...