Выберите двоичную матрицу случайным образом - Matlab - PullRequest
2 голосов
/ 16 ноября 2011

Я работаю с большими двоичными матрицами, на данный момент до 100x100.

Допустим, я работаю с двоичными матрицами 30x30. Тогда есть всего 2 ^ (30x30) двоичных матриц. Я хочу выбрать двоичную матрицу случайным образом, где каждая из 2 ^ (30x30) матриц имеет одинаковую вероятность выбора.

Моей попыткой было выбрать число от 1 до 2 ^ (30x30), используя функцию randi (n) с n = 2 ^ (30x30), и затем преобразовать результат в соответствующую двоичную матрицу. Проблема, с которой я столкнулся, заключалась в том, что randi (n) не принимает значения для n больше 2 ^ 54. Матлаб вообще не любит очень большие числа.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Вы можете использовать randint в диапазоне [0 1]:

matrix=randint(30,30,[0 1]);

Вы также можете использовать rand и пороговое значение полученной матрицы:

matrix=rand(30,30);
matrix=round(matrix);

РЕДАКТИРОВАТЬ : только что понял, что это также работает с randi со следующим синтаксисом:

matrix=randi([0 1],30,30);
2 голосов
/ 16 ноября 2011

Если каждая матрица логических значений имеет равную вероятность, то элементы матрицы имеют равную вероятность 0 и 1. Вы можете просто заполнить матрицу соответствующего размера с помощью n ² равномерных случайных логических значений.

У меня нет MATLAB под рукой, но в Octave вы бы сделали что-то вроде unidrnd(2, n, n) - 1.

...