2017-01-06 32 views
1

Я хочу поместить двоичное эквивалентное число для каждого элемента сбоку - то есть конечная матрица Concatenated_A будет иметь размер m by nbits*n, где [m,n] = size(A);Соединительные двоичные строки, полученные от десятичной до двоичной конверсии

A = [5, 5, 4, 10, 4; 
    10, 10, 10, 10, 5; 

    ]; 

Я сделал попытку, но результат был неправильным. Мне нужна помощь в правильной реализации конкатенации. Спасибо

[m,n] = size(A); 
numbits = 4; 
for m = 1:M 

Abin = dec2bin(A(m,:),numbits); 
for j = 1:size(Abin,1) 
Concatenated_A(m,:) = Abin(j,:); 
end 

end 

Для первого ряда в A(1,:) = 5, 5, 4, 10, 4; его десятичное преобразование каждого элемента даст матрицу, как показано ниже.

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

Тогда, как я могу сделать что-то вроде этого:

Concatenated_A(1,:) = [0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0 0]

выше операция повторяется для каждой строки в A.

ответ

1

Вы можете транспонировать результат dec2bin так, чтобы двоичное представление сходилось вниз по столбцам, а затем переформатировало его в нужную форму, чтобы каждая строка находилась в собственной строке. После перестройки мы снова берем транспонирование, чтобы строки снова пересекали строки. Кроме того, перед тем, как мы начнем, мы обязательно должны перенести A так, чтобы мы кодировали вдоль строк.

out = reshape(dec2bin(A.', numbits).', [], size(A, 1)).' 
% 01010101010010100100 
% 10101010101010100101 

Или, если вы хотите логическую матрицу вместо этого вы можете сравнить массив вашего персонажа к персонажу '1'

out = reshape(dec2bin(A.', numbits).', [], size(A, 1)).' == '1' 
% 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0 0 
% 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 
+0

двоичные цифры не являются правильными. Если вы можете получить ответ «Конкатенация_А» (1, :) = [0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0 0] 'отличается от вашего. Ваш результат '0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 0' имеет '1' в пятом бите. В принципе, если я преобразовываю строки двоичного слова в слова «nbits», я должен иметь возможность вернуть десятичную матрицу 'A'. Итак, используя '0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 0' из вашего ответа должна быть указана первая строка' A', которая является '5,5,4,10,4' , Но на основе вашего ответа это не происходит, поскольку двоичные цифры неверны. –

+0

Оба подхода к решению дают неправильные двоичные строки :( –

+0

@SrishtiM К сожалению, я пропустил транспонирование! Исправлено. – Suever