我想在matlab中创建一个带有500个单元格(50行,10列)的矩阵,如何创建并通过随机二进制数字对其进行初始化? 我想要50 * 10比例这样的东西 作为样本3 * 4
0 1 1 1
0 0 0 0
1 1 1 1
之后,如何获得任何行的十进制方程?比如第1行等于7的十进制
答案 0 :(得分:11)
为什么不使用randi
生成随机整数?
A = randi([0 1], 50, 10);
并将二进制行转换为数字 - 如前面的答案所示:
bin2dec(num2str(A(n,:)))
答案 1 :(得分:5)
试试这个:
A = rand(50, 10) > 0.5;
n
行的十进制等值由:
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
快几倍。
答案 2 :(得分:5)
另一种选择:
A=round(rand(50,10));
第n行的十进制eq由下式给出:
bin2dec(num2str(A(n,:)))
答案 3 :(得分:2)
通过其他answares更短我发现它相当没有吸引力生成具有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来说并不重要]:
抽动;对于i = 1:1000; n = randi([0,2 ^ 10-1],50000,1,'uint16');端; TOC
Elapsed time is 1.341566 seconds.
抽动; for i = 1:1000; n = bsxfun(@(n,i)logical(bitget(n,i)),randi([0,2 ^ 10-1],50000,1,'uint16'),10: -1:1);端; TOC
Elapsed time is 2.547187 seconds.
抽动;对于i = 1:1000; n = rand(50000,10)> 0.5;结束; toc
Elapsed time is 8.030767 seconds.
抽动;对于i = 1:1000; n = sum(bsxfun(@ times,rand(50000,10)> 0.5,2。^(0:9)),2);端; TOC
Elapsed time is 13.062462 seconds.
binornd
甚至更慢:
抽动;对于i = 1:1000; n =逻辑(binornd(ones(50000,10),0.5));端; TOC
Elapsed time is 47.657960 seconds.
请注意,由于MATLAB保存逻辑的方式,这仍然不是最佳的。 (保存为字节的位...)
答案 4 :(得分:0)
或者你可以这样试试:
A = binornd(ones(50,10),p);
通过这种方式,您还可以选择控制出现概率。