Find longest consecutive sequence in 3d matrix

조회 수: 1 (최근 30일)
Elin Jacobs
Elin Jacobs 2021년 11월 22일
댓글: Elin Jacobs 2021년 11월 29일
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
Dyuman Joshi
Dyuman Joshi 2021년 11월 24일
How exactly do you want to find the longest consecutive sequence in 3D data? What will be the order of the sequence? Can you show an example?
Elin Jacobs
Elin Jacobs 2021년 11월 29일
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.

댓글을 달려면 로그인하십시오.

채택된 답변

Matt J
Matt J 2021년 11월 29일
편집: Matt J 2021년 11월 29일
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);

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

제품


릴리스

R2016a

Community Treasure Hunt

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

Start Hunting!

Translated by