要素ごとに、異なる行列のバイナリ値を 1 つの行列に連結したいと考えています。
例えば、
|1 0 0| |0 1 0| |10 01 00|
|0 1 1| |1 1 0| = |01 11 10|
|1 0 1| |0 0 1| |10 00 11|
これはどのように行うことができますか?
要素ごとに、異なる行列のバイナリ値を 1 つの行列に連結したいと考えています。
例えば、
|1 0 0| |0 1 0| |10 01 00|
|0 1 1| |1 1 0| = |01 11 10|
|1 0 1| |0 0 1| |10 00 11|
これはどのように行うことができますか?
出力行列を 10 進行列として格納し、要素にアクセスするときにバイナリ文字列に変換します。
要素を連結するには、各入力行列を 2 進数として扱います
A1 = [1 0 0; 0 1 1; 1 0 1];
A2 = [0 1 0; 1 1 0; 0 0 1];
output = A1 * 2^1 + A2 * 2^0;
output_str = arrayfun(@dec2bin, output, 'UniformOutput', false);
output
二重行列になります
[2, 1, 0;
1, 3, 2;
2, 0, 3]
output_str
文字列のセル配列になります
['10', '1', '0';
'1', '11', '10';
'10', '0', '11']
bin2dec
またはdec2bin
変換なしの1つの代替手段を次に示します
out = arrayfun(@(x,y) strcat(num2str(x),num2str(y)),A1,A2,'Uni',0);
入力:
A1 = [1 0 0; 0 1 1; 1 0 1];
A2 = [0 1 0; 1 1 0; 0 0 1];
出力:
>> out
out =
'10' '01' '00'
'01' '11' '10'
'10' '00' '11'
文字列ではなく数値にしたい場合は、次のようにします。
outp = cellfun(@(x) str2double(x), out);
出力:
>> outp
outp =
10 1 0
1 11 10
10 0 11