11

500セル(50行10列)のMATLABでマトリックスを作成したいのですが、ランダムな2進数でマトリックスを作成して初期化するにはどうすればよいですか?サンプル3*4として50*10スケールでこのようなものが欲しい

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

その後、どの行の10進方程式を取得できますか?行1のように10進数で7に等しい

4

5 に答える 5

12

randiランダムな整数を生成するために使用してみませんか?

A = randi([0 1], 50, 10);

前の回答のように、2進行を数値に変換します。

bin2dec(num2str(A(n,:)))
于 2012-10-14T06:44:36.843 に答える
5

これを試して:

A = rand(50, 10) > 0.5;

3番目の行に相当する10進数は、次の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

于 2012-10-14T06:24:26.543 に答える
5

別のオプション:

 A=round(rand(50,10));

n番目の行の10進式は次の式で与えられます。

 bin2dec(num2str(A(n,:)))
于 2012-10-14T06:31:18.503 に答える
2

他のアンスウェアはより短いので、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にとっては重要ではないようです]:

チック; for 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.

チック; for i = 1:1000; n = sum(bsxfun(@ times、rand(50000,10)> 0.5,2。^(0:9))、2); 終了;toc

Elapsed time is 13.062462 seconds.

binorndさらに遅い:

チック; for i = 1:1000; n = logic(binornd(ones(50000,10)、0.5)); 終了;toc

Elapsed time is 47.657960 seconds.

MATLABが論理を保存する方法のため、これはまだ最適ではないことに注意してください。(ビットはバイトとして保存されます...)

于 2014-02-17T20:57:59.333 に答える
0

または、次のように試すことができます。

A = binornd(ones(50,10),p);

このようにして、発生の確率を制御するオプションもあります。

于 2013-05-24T19:37:19.877 に答える