Заменить строку в массиве ячеек на числовой массив ячеек 1x3 - PullRequest
1 голос
/ 01 июля 2011

Данные массива ячеек, как показано ниже:

data=

'A' [0.006] 'B'
'C' [3.443] 'C'

Я хотел бы преобразовать символ в первом столбце в вектор 1x3, означает, что

  • 'A' заменить на [0] [0] [0],
  • 'C' заменить на [0] [1] [0] ..

результат будет

[0] [0] [0] [0.006] 'B'
[0] [1] [0] [3.443] 'C'

код, который я пробовал, как показано ниже:

B=data(1:end,1);
B=regexprep(B,'C','[0 0 0]');
B=regexprep(B,'A','[0 1 0]');

результат покажет мне

B=

'[0 0 0]'
'[0 1 0]'

, что неверно, каждый символ не меняется на массив 1x3 ... пожалуйста, помогите ...

1 Ответ

0 голосов
/ 02 июля 2011

Поскольку вы не указали правило для преобразования букв в числа, Я предположил, что вы хотите заменить A на 000, B на 001, ..., H на 111 (то есть числа от 0 до 7 в двоичном формате, соответствующие буквам от A до H).

Если вы хотите перейти к Z, приведенный ниже код можно легко изменить.

%# you data cell array
data = {
    'A' [0.006] 'B'
    'C' [3.443] 'C'
};

%# compute binary numbers equivalent to letters A to H
binary = num2cell(dec2bin(0:7)-'0');      %# use 0:25 to go up to Z

%# convert letters in to row indices in the above cell array "binary"
idx = cellfun(@(c) c-'A'+1, upper(data(:,1)));

%# replace first column, and build new data
newData = [binary(idx,:) data(:,2:end)]

Результат:

newData = 
    [0]    [0]    [0]    [0.006]    'B'
    [0]    [1]    [0]    [3.443]    'C'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...