Count the number of days between two conditions
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Dear all,
- I have temperature (T) daily data in 1992. I want to count the days between T > 5 for > 5 days & T < 5 for > 5 days.
- I am able to determine the index when T > 5 & T < 5 but do not know how to proceed any further.
load('Test.mat');
f1 = find(T > 5);
f2 = find(T < 5);
How do I go about doing this? Thank you very much.
0 comentarios
Respuestas (2)
Walter Roberson
el 11 de Abr. de 2023
There is a very useful trick to use:
mask = reshape(T,1,[]) > 5;
starts = strfind([0 mask], [0 1]);
stops = strfind([mask 0], [1 0]);
Now starts(K) and stops(K) together indicate indices of the beginning and end of runs of T > 5; you can calculate durations by looking at the difference between them.
Careful, though: If the data were [2 6 3] then mask would be [0 1 0] and starts would be 2 and stops would also be 2. The run starts at index 2 and ends at index 2, which is duration 1.
Now, you can filter those runs out to only find the ones of sufficient duration. Or you can modify the strfind() search. If you extend the [0 1] to [0 1 1 1 1 1] and [1 1 1 1 1 0] in the other one, you only match runs of at least 5. But when you do that you will find you need to adjust the indices returned by stops.
What do you want to do in the case of T being exactly 5 ? Should [7 8 5 7 9 8] qualify as a run of 6 days, or does it get disqualified because exactly 5 is not > 5 ?
0 comentarios
Matt J
el 11 de Abr. de 2023
Editada: Matt J
el 11 de Abr. de 2023
I want to count the days between T > 5 for > 5 days & T < 5 for > 5 days.
I hope you realize that this event occurs multiple times throughout your attached T data. Using this FEX download,
I find, in fact that it happens 9 times:
[s1,e1,r1]=groupLims( groupTrue(T>5) );
[s2,e2,r2]=groupLims( groupTrue(T<5) );
s=e1(r1>5);
e=s2(r2>5);
n=find(e>s(1),1,'first');
m=min(numel(s), numel(e)+1-n );
Start=s(1:m);
Duration=e(n:n+m-1)-Start-1;
result=table(Start,Duration)
result =
9×2 table
Start Duration
_____ ________
20 2
29 5
45 12
69 0
75 18
292 1
308 12
330 0
349 5
0 comentarios
Ver también
Categorías
Más información sobre Characters and Strings en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!