计算值的连续重复

时间:2019-10-30 21:04:39

标签: matlab find

我有一个数据集,通常每个半小时就有一个数据(所以每小时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 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 ...]

我想知道粗体 4、7 14 的坐标是什么,因为它们连续重复了3次而不是2次。 这是我编写的代码,但是只输出Nan矩阵,而没有用我要查找的坐标填充它。

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 个答案:

答案 0 :(得分:1)

除非我误解了,否则无需循环,您只需检查数组的每个元素是否与同一数组的以下两个元素匹配:

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函数...