Find at least 5 consecutive values above a certain threshold in a vector?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
HYZ
el 17 de Abr. de 2019
Comentada: Ahmad Bayhaqi
el 1 de Mayo de 2021
I have a vector
M = [3,3,5,7,8,8,9,7,4,3,2,1,7,6,5,2,2,2];
I want to find at least 5 consecutive values which are above the threshold, which is 4. So the vector will be
N = [5,7,8,8,9,7]
Could anyone help me with this? Thanks.
0 comentarios
Respuesta aceptada
Walter Roberson
el 17 de Abr. de 2019
mask = M > 4;
starts = strfind([0 mask], [0 1 1 1 1 1]);
stops = strfind([mask 0], [1 1 1 1 1 0]);
N = M(starts(1) : stops(1))
Más respuestas (2)
Akira Agata
el 17 de Abr. de 2019
If there are 2 or more consective values above the threshold, the following is one possible solution.
(* The following needs Image Processing Toolbox)
M = [3,3,5,7,8,8,9,7,4,3,6,5,8,5,8,2,1,7,6,2,6,2];
idx = M > 4;
idx = bwareafilt(idx,[5,Inf]);
label = bwlabel(idx);
N = cell(max(label),1);
for kk = 1:max(label)
N{kk} = M(label == kk);
end
Result:
>> N
N =
2×1 cell array
{1×6 double}
{1×5 double}
>> N{1}
ans =
5 7 8 8 9 7
>> N{2}
ans =
6 5 8 5 8
>>
9 comentarios
Akira Agata
el 9 de Abr. de 2021
OK. I believe the error was due to the difference between the 3D matrix in my sample code and the real data.
Is it possible to upload part of your real data and the modified code which generates the error?
Ahmad Bayhaqi
el 1 de Mayo de 2021
Hi @Akira Agata
Thank you for your code. It works for me.
However, since my temperature data contains date. How the result of looping includes the datetime to define when the temperature is higher than threshold?
Thank you very much
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!