Как мне сгенерировать случайный вектор (0,1) с известной вероятностью в MATLAB? - PullRequest
4 голосов
/ 02 сентября 2011

Я использую следующий код

operation=[rand(1,noOfNodes)>prob];

для генерации 1 и нулей (noOfNodes раз). Если я использую prob=0.2 и пробую 100 значений, в некоторых случаях существует 40 нулей. Разве это не странно?

Мне нужна вероятность получения нулей меньше 0,2

1 Ответ

7 голосов
/ 02 сентября 2011

Нет, это не странно.Это вероятность для вас.

Если вы подбрасываете монету 100 раз, вы не всегда получаете 50 голов и 50 хвостов.Иногда вы получаете 49 и 51, и в этом редком случае вы можете получить один и тот же 100 раз.

С вашим кодом выше, вы не гарантированно получите 20 нулей и 80, когда noOfNodesравно 100. Если вы хотите сгенерировать вектор, который всегда имеет 20% нулей, но со случайным упорядочением нулей и единиц, то вы можете сделать это, используя функцию RANDPERM примерно так:

operation = [zeros(1,20) ones(1,80)];  %# Fill the vector with 0 and 1
operation = operation(randperm(100));  %# Randomly reorder it

Если вы хотите сгенерировать вектор с нулями от 0% до 20%, вы можете изменить приведенный выше код, используя функцию RANDI :

operation = [randi([0 1],1,20) ones(1,80)];
operation = operation(randperm(100));
...