Ответ 1
Почему бы не использовать randi
для генерации случайных целых чисел?
A = randi([0 1], 50, 10);
и преобразовать двоичную строку в число - как в предыдущих ответах:
bin2dec(num2str(A(n,:)))
Я хочу создать матрицу в matlab с 500 ячейками (50 строк, 10 столбцов), как я могу создать и инициализировать его случайными двоичными цифрами? Я хочу что-то подобное в шкале 50 * 10 в качестве образца 3 * 4
0 1 1 1
0 0 0 0
1 1 1 1
и после него, как можно получить десятичное уравнение любой строки? как строка 1 равна 7 в десятичной форме
Почему бы не использовать randi
для генерации случайных целых чисел?
A = randi([0 1], 50, 10);
и преобразовать двоичную строку в число - как в предыдущих ответах:
bin2dec(num2str(A(n,:)))
Попробуйте следующее:
A = rand(50, 10) > 0.5;
Десятичный эквивалент строки n
th определяется следующим образом:
bin2dec(num2str(A(n,:)))
или, если хотите,
sum( A(n,:) .* 2.^(size(A,2)-1:-1:0) ) % for big endian
sum( A(n,:) .* 2.^(0:size(A,2)-1) ) % for little endian
что в несколько раз быстрее, чем bin2dec
.
Другая опция:
A=round(rand(50,10));
Десятичный eq n-й строки определяется следующим образом:
bin2dec(num2str(A(n,:)))
С помощью других яснее я нахожу это довольно непривлекательным, генерируя случайные числа с 32 или 64-битными номерами, а затем отбрасывая 31 или 63 из них... и, скорее, с чем-то вроде:
A_dec=randi([0,2^10-1],50,1,'uint16');
И чтобы получить бит:
A_bin=bsxfun(@(a,i)logical(bitget(a,i)),A_dec,10:-1:1);
Это также в несколько раз быстрее для больших массивов (R2014a, i7 930) [но это не кажется важным для OP]:
крестики; для я = 1:1000; n = randi ([0,2 ^ 10-1], 50000,1, 'uint16'); конец; TOC
Elapsed time is 1.341566 seconds.
крестики; для я = 1:1000; n = bsxfun (@(n, i) логический (битгет (n, i)), randi ([0,2 ^ 10-1], 50000,1, 'uint16'), 10: -1:1); конец; TOC
Elapsed time is 2.547187 seconds.
крестики; для я = 1:1000; n = rand (50000,10) > 0,5; end; toc
Elapsed time is 8.030767 seconds.
крестики; для я = 1:1000; n = сумма (bsxfun (@times, rand (50000,10) > 0,5,2. ^ (0: 9)), 2); конец; TOC
Elapsed time is 13.062462 seconds.
binornd
еще медленнее:
крестики; для я = 1:1000; n = логический (бинннд (единицы (50000,10), 0,5)); конец; TOC
Elapsed time is 47.657960 seconds.
Обратите внимание, что это все еще не оптимально из-за того, как MATLAB сохраняет логические. (биты, сохраненные как байты...)
Или вы можете попробовать это следующим образом:
A = binornd(ones(50,10),p);
Таким образом, вы также можете управлять вероятностью их появления.