Как преобразовать двоичный вектор строки в обычный вектор строки в Matlab? - PullRequest
0 голосов
/ 24 марта 2012

У меня есть бинарный вектор-строка, например

b = dec2bin (15)

Этот вектор ведет себя плохо, когда я пытаюсь умножить его по компонентам на «нормальный» вектор. Как мне преобразовать b в нормальный вектор?

Точнее, если

d = [1 2 3 4]

Я хочу

n = d. * B

, чтобы дать мне [1 2 3 4], но вместо этого он дает [49 98 147 196].

Спасибо

Ответы [ 3 ]

5 голосов
/ 24 марта 2012

str2num будет работать, но, так как вам гарантирована только одна цифра в каждой ячейке, вы можете попробовать

b = dec2bin(15) - 48;

что должно быть намного быстрее.

Примечание: 48 - это код ASCII для символа "0".

2 голосов
/ 24 марта 2012

Ваша проблема в том, что dec2bin возвращает массив символов.Когда вы выполняете поэлементное умножение на массив d, вы получаете результаты умножения d поэлементно на код ASCII для символа '1', который равен 49.

Если вы хотитеумножить d на массив [1 1 1 1] это похоже на замысловатый подход.Так что же вы на самом деле пытаетесь сделать?

Чтобы преобразовать символ (массив) в число, вы должны использовать функцию str2num.Здесь она преобразует строку '1111' в число 1111, поэтому str2num(dec2bin(15)) возвращает 1111.

0 голосов
/ 24 марта 2012

Проблема в том, что dec2bin возвращает строку , а не числовой вектор. Вы должны преобразовать массив char в числовой массив, и вы можете сделать это с помощью arrayfun , например:

b = dec2bin(15);
b_numeric = arrayfun(@(x) str2num(x), b);
n = d.*b_numeric;

Если у вас есть набор инструментов системы связи, у вас уже есть функция, которая делает именно это, de2bin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...