Равномерное распределение двоичных значений в Matlab - PullRequest
1 голос
/ 14 марта 2010

У меня есть требование для генерации заданного числа N векторов заданного размера, каждый из которых соответствует равномерному распределению 0 и 1.

Это то, что я делаю в данный момент, но я заметил, что распределение сильно достигло половины 1 с и 0, что не очень хорошо для того, что я делаю:

a = randint(1, sizeOfVector, [0 1]);

Функция unifrnd выглядит многообещающе для того, что мне нужно, но я не могу понять, как вывести двоичный вектор такого размера.

Это тот случай, когда я могу использовать функцию unifrnd (и если да, то как это будет оценено!) Или же есть какой-нибудь другой, более удобный способ получения такого набора векторов?

Любая помощь приветствуется!

Примечание 1 : просто чтобы быть уверенным - вот что на самом деле говорит требование:

случайным образом выбирают N векторов заданного размера, которые равномерно распределены по [0; 1]

Примечание 2 : я генерирую начальные конфигурации для сотовых автоматов, поэтому могу иметь только двоичные значения [0; 1].

Ответы [ 2 ]

2 голосов
/ 14 марта 2010

Для генерации 1 случайного вектора с элементами из {0, 1}:

unidrnd(2,sizeOfVector,1)-1

Другие варианты похожи.

0 голосов
/ 14 марта 2010

Если вы хотите получить равномерно распределенные 0 и 1, вы должны использовать randi . Однако, исходя из требования, я думаю, что векторы могут иметь реальные значения, для которых вы будете использовать rand

%# create a such that each row contains a vector

a = randi(1,N,sizeOfVector); %# for uniformly distributed 0's and 1's

%# if you want, say, 60% 1's and 40% 0's, use rand and threshold
a = rand(N,sizeOfVector) > 0.4; %# maybe you need to call double(a) if you don't want logical output

%# if you want a random number of 1's and 0's, use
a = rand(N,sizeOfVector) > rand(1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...