2017-01-06 52 views
0

我有一個僅包含整數的2D matrix。我也有一個單元格數組tickerList,其中包含股票代號的名稱。 matrix中的列數等於tickerList中的元素數。使用查找表填充單元陣列

我試圖通過將matrix中的整數替換爲tickerList中的相應名稱來創建cellArrayNew。因此,例如,如果matrix(1,1)=3tickerList(3)='S&P 500',我想要cellArrayNew(1,1)='S&P 500'

回答

1

只需使用矩陣的一個索引tickerList

% Sample column names 
tickerList = {'Col1' 'Col2' 'Col3'}; 

% Example matrix 
N = numel(tickerList); 
matrix = randi(N, [4, N]); 

% The matrix is already in index form, so just index: 
cellArrayNew = tickerList(matrix); 

如果矩陣包含在某種程度上指標tickerList,使用ismember:我的例子中

% Make some elements 'NaN'; 
matrix(rand(size(matrix)) < 0.2) = NaN; 

% Determine which elements are in tickerList, 
% as well as where they are precisely 
[isin, I] = ismember(matrix, 1:N); 

% Construct new matrix 
cellArrayNew = repmat({NaN}, size(matrix)); % <- use any filler you want 
cellArrayNew(isin) = tickerList(I(isin)) 

結果:

cellArrayNew = 
    'Col2' 'Col1' [ NaN] 
    'Col3' [ NaN] 'Col2' 
    'Col3' 'Col3' 'Col3' 
    'Col3' 'Col1' 'Col2' 
+0

爲什麼你使用'ismember'。從你的解決方案中,我才知道'I'等於'矩陣'。所以,非常簡單的解決方案似乎是 'cellArrayNew = tickerList(matrix)' 我錯過了什麼嗎? – Andi

+0

@安迪......非常真實。必須一直睡在那裏:) –

+0

@Andi只是記住未來 - 「ismember」允許你對*可能*的元素做同樣的事情,超過'tickerList'的長度(情況I通常會遇到,這可能是爲什麼我的肌肉記憶在踢這個答案時踢了☺) –