Issue with using loop

조회 수: 2 (최근 30일)
Suman Dhamala
Suman Dhamala 2021년 6월 19일
댓글: Jan 2021년 6월 19일
I have 3 dimensional matrix, 135*129*43099. 43099 being the daily rainfall value for 118 years(1901 to 2018). I intend to convert this daily rainfall value to monthly rainfall value, resulting matrix 135*129*1416.
For this I created a matrix of size 1416*5. Each row representing each month for 118 years. First column is year, second column is month, third column is number of number of days in a month (irrevelant and not used here), fourth and fifth column is the index. Gilmpse of such matrix's small portion is below.
Name of matrix: 'statarrayD'
1901 1 31 1 31
1901 2 28 32 59
1901 3 31 60 90
1901 4 30 91 120
1901 5 31 121 151
1901 6 30 152 181
Here is the deal, I want to add 1st to 31st value of those 43099 values to place it into a first row, similarly for second row, i want to add 32nd to 59th value of 43099 values. This way i would have 1416 rows in the resulting matrix, formed as a result of adding those 43099 values, which is named MRain here.
Code:
MRain=NaN(135,129,1416);
x=1;
for i=1:1416
MRT=NaN(135,129,43099);
min=statarrayD(i,4);
max=statarrayD(i,5);
MRT(:,:,min:max)=temp(:,:,min:max);
MRain(:,:,x)=sum(MRT,3);
x=x+1;
end
MRT is the temporary matrix that would return monthly values. Say when value of i=1 then, it would return the 1st to 31st rainfall values, remaining being NaN. min and max would return 1 and 31 respectively. min and max are basically 4th and 5th column of the matrix shown above. I am using sum function to add the MRain montly values, to get one value for each month.
This code seems to work perfectly without loop, when i use the numerical value like 1, 2, 3 instead of value of i, like code shown below. But returns NaN value for entire MRain matrix with used with loop. I am missing something in the loop.
%test%
MRest=NaN(135,129,1416);
MRTest=NaN(135,129,35);
min=statarrayD(1,4);
max=statarrayD(1,5);
MRTest=temp(:,:,min:max);
MRest(:,:,1)=sum(MRTest,3);
  댓글 수: 4
dpb
dpb 2021년 6월 19일
Look into tables, timetables, datetime, grouping variables with findgroups and splitapply
There are tools built for these kinds of analyses that, with a datetime variable associated with thd data can make these things a cakewalk...
Jan
Jan 2021년 6월 19일
Hint: avoid using "min" and "max" as variables, because shadowing built-in functions cause unexpected behavior frequently, if you try to use the functions later:
clear all
max(1:10) % 10
max = 17;
max(1:10) % error

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

답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by