2013-11-19 3 views
0

Я пишу код, который сравнивает данные вектора. Он должен подсчитать, сколько позиций (acc) имеет одинаковые значения и сохраняет определенное значение в векторе той же длины количества позиций (n_T(acc)).MATLAB занят, цикл работает хорошо, пока i = 29996, когда i = 29997 stay Busy

Мои данные вектор [30000 x 1]. Например, первые 80 позиций имеют одинаковое значение, следующие 60 позиций имеют одинаковое значение и т. Д., Следующие 5 позиций имеют одинаковое значение. Код работает хорошо, если я использую только 29996 значений. Я не понимаю, почему, когда я пытаюсь использовать полный вектор, MATLAB остается занятым.

Проверка моего вектора данных, я заметил, что последние 5 позиций эквивалентны [29996: 30000]. Это может быть причина, и что я должен изменить?

Ниже приводится код

%======================================================== 
%ac: data vector` 
%acc1: accumulator which count how much positions have the same value 
%n_T: vector which presents the values I need, in the same positions the data is equal 
%m: show a value where i should begin 
%======================================================== 

i=m; %previously used` 
fv=length(ac) 

while i<fv %29996 
    acc1=0; 
    for i=m+1:fv 
     if ac(i)==ac(i-1) 
      acc1=acc1+1; % count how much positions are equals 
     else 
      m=i; 
      break 
     end 
    end 
    mi=m-acc1; %define where the data n_T should begin 
    for i=mi:m 
     n_T(i)=tm/acc1; %create a vector with length [acc x1] begining in mi and finishing in m 
    end 
    m=i; 
end 
plot(n_T) 
+0

Что означает '% m: показать значение, где я должен начинать? –

ответ

0

ли работа, если вы сделаете это в векторизованном образе? Не совсем уверен, что вы хотите, чтобы программа выводила.

% locate repeated elements 
eq_els = ac(diff(ac) == 0); 
% count number of repeated elements (unique) 
unique_els = unique(eq_els); 
num_equal_els = numel(unique_els); 

% create variable-length lists for each unique element 
each_eq_list = cell(num_equal_els,1); 
for (k = 1:num_equal_els) 
    % each vector in the cell array is equal to the elements of ac that are equal to the current unique item 
    each_eq_list{[k]} = ac(ac == unique_els(k)); 
end 

Длина each_eq_list{[k]} длина от общего количества смежных повторяющихся значений повторного значения k.