Заменить строки целочисленными идентификаторами в ячейке - Matlab - PullRequest
1 голос
/ 11 июня 2011

У меня есть ячейка с строковыми идентификаторами.Мне нужно заменить их целочисленными идентификаторами, чтобы ячейка могла быть преобразована в матрицу.Мне особенно нужно, чтобы это была векторизованная операция, поскольку данные ячейки огромны.

celldata = { 'AAPL' [0.1] ; 'GOOG' [0.643] ; 'IBM' [0.435] ; 'MMM' [0.34] ; 'AAPL' [0.12] ; 'GOOG' [1.5] ; 'IBM' [0.75] ; 'AAPL' [0.56] ; 'GOOG' [0.68] ; 'IBM' [0.97] ; };

Я разработал последовательный intID:

intIDs = {'AAPL' [1] ; 'GOOG' [2] ; 'IBM' [3] ; 'MMM' [4]};

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

Желаемый результат:

celldata = {[1] [0.1] ; [2] [0.643] ; [3] [0.435] ; [4] [0.34] ; [1] [0.12] ; [2] [1.5] ; [3] [0.75] ; [1] [0.56] ; [2] [0.68] ; [3] [0.97] ;};

Спасибо!

1 Ответ

3 голосов
/ 11 июня 2011

Вы можете использовать функцию ismember и логическое индексирование для достижения желаемого.

[~,indx]=ismember(celldata(:,1),intIDs(:,1));
celldata(:,1)=intIDs(indx,2)

celldata = 

    [1]    [0.1000]
    [2]    [0.6430]
    [3]    [0.4350]
    [4]    [0.3400]
    [1]    [0.1200]
    [2]    [1.5000]
    [3]    [0.7500]
    [1]    [0.5600]
    [2]    [0.6800]
    [3]    [0.9700]
...