Найти последнее последовательное появление в массиве ячеек

У меня есть массив ячеек, который выглядит следующим образом:

Tickerarray = 

'MNST'    'MNST'    'MNST'    'ALGN'    'ALGN'
'GRA'     'VLO'     'GRA'     'SKS'     'SKS' 
'VLO'     'GRA'     'SKS'     'TSO'     'JDSU'
'TSO'     'TSO'     'TSO'     'VLO'     'TSO' 

Учитывая определенный столбец этого массива ячеек, мне нужно найти для каждой записи самый дальний (справа) последовательный столбец, содержащий эту запись. Например, учитывая первый столбец этого массива ячеек, мне нужен вывод:

'3'
'3'
'2' % even though VLO appears in column 4, it does not appear consecutively
'5'

Учитывая столбец 3 в качестве входных данных, я бы хотел, чтобы в качестве вывода:

'1'
'1'
'3'
'3'

person user101600    schedule 26.01.2014    source источник
comment
Я думаю, что в вашем примере есть лишний 3. Кроме того, учитывая столбец, который не равен 1, хотите ли вы принять во внимание столбцы слева от него? то есть, учитывая столбец 3 в качестве входных данных, SKS появляется последовательно в столбце 5 - является ли желаемый результат 5?   -  person nkjt    schedule 27.01.2014
comment
Вы правы; Я отредактировал его. Я бы не хотел учитывать столбцы слева; Я добавил пример, используя столбец 3.   -  person user101600    schedule 27.01.2014


Ответы (1)


Это можно сделать с помощью strcmp или аналогичных функций для сопоставления строк в массиве ячеек, а затем с помощью sum найти первый столбец со всеми нулями (без совпадений), если таковые имеются.

c= 1; % which column do we want
sArray = Tickerarray(:, c:End); 
l = size(sArray,1); % how many rows

% preallocating output array 
out = ones(l,1).*size(sArray,2); 

for n = 1:l
   str = sArray{n,1};
   x = strcmp(str, sArray); % is logical index of hits
   m = find(sum(x)==0,1); % find first column containing all zeros
   if ~isempty(m)  % else defaults to preallocated value
      out(n) = m-1; 
   end
end
person nkjt    schedule 27.01.2014