1

行列 A と B があるとします。3 番目の行列 C を作成します。

A = [1,0,0,1]

B = [1,0,1,0]    

C = [11, 00, 01, 10] 

Matlabにそのような機能はありますか? そうでない場合、これを行う関数を作成するにはどうすればよいですか?

編集: C は文字どおりの数字ではありません。これらは、要素ごとに A,B を連結した値です。

Edit2:私が扱っている実際の問題は、x、y > 1000 のサイズ [x、y] の 10 個の大きな行列があることです。これらの行列の要素にはすべて 0 と 1 があります。他の番号はありません。私が達成する必要があるのは、マトリックス 1 の要素 [x1,y1] をマトリックス 2 の [x1,y1] の要素に追加し、その値をマトリックス 3 の [x1,y1] に追加することです。

もう一つの例:

A = [1,1,1,1;
     0,0,0,0]

B = [0,0,0,0;
     1,1,1,1]

C = [1,0,1,0;
     0,1,0,1]

そして、行列 D が必要です

D = [101, 100, 101, 101; 010, 011, 010, 011]
4

3 に答える 3

2

出力をどのようにフォーマットするかによって異なります。bitshift数値に適用してバイナリに変換できます。

>> b = dec2bin(bitshift(A,1)+B)

b =

    11
    00
    01
    10

一般的な行列の場合Digits:

>> Digits

Digits =

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

>> Ddec = D*(2.^(size(D,2)-1:-1:0))'; % dot product
>> dec2bin(Ddec)

ans =

1000
0100
1011
1100
1000
1011
1100
1010
0111
0111

それを書く別の方法はdec2bin(sum(D .* repmat(2.^(size(D,2)-1:-1:0),size(D,1),1),2)).

10 個の大きな行列(たとえばM1M2M10Digits

Digits = [M1(:) M2(:) M3(:) M4(:) M5(:) M6(:) M7(:) M8(:) M9(:) M10(:)];

数字の順序が逆の場合は、 を実行してくださいDigits = fliplr(Digits);

何も形を変えたくない場合は、次のように数字の行列から行列の 10 進数値を計算できます。

M = cat(3,A,B,C);
Ddec = sum(bsxfun(@times,M,permute(2.^(size(M,3)-1:-1:0),[1 3 2])),3)
于 2013-11-07T05:39:09.740 に答える
0

非常に広範な回答がいくつかあるので、おそらくこれは単純すぎると思いますが、2 進数を表す 1 と 0 のベクトルがあると仮定すると、次のようになります。

A = [1,0,0,1];
B = [1,0,1,0];  

C = 10*A + B

これにより、必要な数値が得られます。先行ゼロを追加することもできます。もちろん、このメソッドは複数の行列を追加するように簡単に拡張できます。追加する前に、それらの間に係数 (基数) 10 があることを確認する必要があります。

于 2013-11-07T13:38:21.263 に答える