Поэлементная двоичная конкатенация двоичных значений
Элемент за элементом я хочу объединить двоичные значения из разных матриц в одну матрицу.
Например,
|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|
Как это может быть сделано?
2 ответа
Решение
Вот одна альтернатива без bin2dec
или же dec2bin
преобразование
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
Я хотел бы сохранить выходную матрицу в виде десятичной матрицы и преобразовывать в двоичные строки при доступе к элементам.
Чтобы объединить элементы, обрабатывайте каждую входную матрицу как двоичную цифру
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']