Find longest consecutive sequence in 3d matrix

3 views (last 30 days)
I have a large 3d matrix (latitude x longitude x time) and need to find the longest consecutive time sequence of values <=1 for each latitude/longitude pair. I have a dummy code that works on 1d data, but I am struggling to translate it to my 3d data. Also attaching a smaller piece of my 3d data file. Any help appreciated.
Dummy 1d code:
x = [0.1 1 0.1 0.11 0.3 3 0.1 11 0.3 0.3 0.3 0.13 10 1 0.3 3 3 0.1 0.1 3 3]; %made up numbers
x(x <= 1) = 0; % setting al values <=1 to 0
f = find(diff([1,x,1]==0));
p = f(1:2:end-1); % Start indices
y = f(2:2:end)-p; % Consecutive zeros
dry_max = max(y); %calculate longest sequence of 0s
  3 Comments
Elin Jacobs
Elin Jacobs on 29 Nov 2021
The attached data file contains rainfall data at the daily time scale for one year (third dimension). I want to find the longest sequence of no rainfall (or rainfall less than 1 mm) at each latitude and longitude (first and second dimension). So the result I want (using the example data file) is a 20 by 30 matrix with a single value for the maxiumum number of days with no rain at each lat/lon pair. I hope that makes it more clear. Thank you.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 29 Nov 2021
Edited: Matt J on 29 Nov 2021
Using,
[M,N,P]=size(prec);
prec=permute(prec,[3,1,2]);
prec=prec(:,:)<=1;
prec(end+1,:)=0;
[starts,stops,runlengths]=groupLims(groupTrue(prec(:)),1);
A=accumarray(starts,runlengths,size(prec(:)));
A=ipermute(reshape(A,[P+1,M,N]),[3,1,2]);
[dry_max,p]=max(A,[],3);

More Answers (0)

Products


Release

R2016a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by