在matlab中使用随机二进制元素创建矩阵

时间:2012-10-14 06:15:54

标签: matlab

我想在matlab中创建一个带有500个单元格(50行,10列)的矩阵,如何创建并通过随机二进制数字对其进行初始化?  我想要50 * 10比例这样的东西 作为样本3 * 4

0 1 1 1
0 0 0 0
1 1 1 1

之后,如何获得任何行的十进制方程?比如第1行等于7的十进制

5 个答案:

答案 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);

通过这种方式,您还可以选择控制出现概率。