рассчитывать последовательные повторы значений - PullRequest
0 голосов
/ 31 октября 2019

У меня есть набор данных, который обычно содержит данные каждые полчаса (таким образом, 2 данные в час), НО некоторые данные имеют 3 данных в час, и я хочу удалить третий. Итак, за каждый час я хочу увидеть, сколько раз это повторяется подряд.

Упрощенный пример:

A = [0 0 1 1 2 2 3 3 4 4 4 5 5 6 6 7 7 8 8 9 9 10 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 0 0 1 1 2 2 3 3 4 4 55 6 6 7 7 7 8 8 9 9 10 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 0 0 1 1 2 2 3 34 4 4 5 5 6 6 7 7 8 8 9 9 10 11 12 12 13 13 14 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 ...]

Я хочу знать, какие координаты выделены жирным шрифтом 4, 7 и 14 , поскольку они повторяются три раза подряд вместо двух. Это код, который я написал, но он выводит только матрицу Нана и не заполняет ее нужными мне координатами.

indexes=year(P20102330.Date)==Year & month(P20102330.Date)==Month; % select correct data from dataset
Feb2330=P20102330(indexes,:);

for i=1:24
    vindhours=find(hour(Feb2330.Date)==i-1);%find coordinates, one hour per step
    svindhours=numel(vindhours); 
    blob=[];
    for j =1:svindhours-1
        result=nan(24,svindhours);%make nan matrix
        if vindhours(j)-vindhours(j+1)==1 %find the coordinates which only differ by one (are consequetive)
            blob=[blob, j] % add those coordinates to a vector
            if numel(blob)>2 % if they are repeated more than 2 times, add them to the result matrix
                result(i,j)=vindhours(j)
            end 
        end
    end
end

1 Ответ

1 голос
/ 31 октября 2019

Если я не понял неправильно, вам не нужно зацикливаться, вы можете просто проверить, соответствует ли каждый элемент массива следующим двум элементам одного и того же массива:

A = [0 0 1 1 2 2 3 3 4 4 4 5 5 6 6 7 7 8 8 9 9 10 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 7 8 8 9 9 10 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 0 0 1 1 2 2 3 3 4 4 4 5 5 6 6 7 7 8 8 9 9 10 11 12 12 13 13 14 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23];
n = numel(A);
rep3 = A(1:(n-2))==A(2:(n-1)) & A(1:(n-2))==A(3:n);
hrs = A(rep3)

На входе 4повторяется дважды и появляется дважды:

hrs =

     4     7     4    14

Если вам нужны уникальные значения, используйте функцию unique ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...