How to write a LOOP for this case?
Mostrar comentarios más antiguos
Hey all
I have 34 variable in my workplace like this:
precip_1982_daily
precip_1983_daily
precip_1984_daily
precip_1985_daily
...
precip_2015_daily
I want to use this if code below:
if size(precip_1982_daily,3)==365
month_lengths=[31 28 31 30 31 30 31 31 30 31 30 31];%non-leap year
else
month_lengths=[31 29 31 30 31 30 31 31 30 31 30 31];%leap year
end
precip_1982_monthly=mat2cell(precip_1982_daily,size(precip_1982_daily,1),size(precip_1982_daily,2),month_lengths);%divide into 1 cell per month
precip_1982_monthly=cellfun(@(x) nansum(x,3),precip_1982_monthly,'UniformOutput',false);%find mean for each month
precip_1982_monthly=cell2mat(precip_1982_monthly);%convert back to 3D array
Respuesta aceptada
Más respuestas (1)
Shubham Gupta
el 28 de Oct. de 2019
Editada: Shubham Gupta
el 28 de Oct. de 2019
So, once you create struture as mentioned in the above answer, you can use:
for i = 1:length(precip)
precip_daily = precip.(['y',num2str(i+1981)]); % Access data of specific year
if size(precip_daily,3)==365
month_lengths=[31 28 31 30 31 30 31 31 30 31 30 31];%non-leap year
else
month_lengths=[31 29 31 30 31 30 31 31 30 31 30 31];%leap year
end
precip_monthly=mat2cell(precip_daily,size(precip_daily,1),size(precip_daily,2),month_lengths);%divide into 1 cell per month
precip_monthly=cellfun(@(x) nansum(x,3),precip_monthly,'UniformOutput',false);%find mean for each month
precip_monthly=cell2mat(precip_monthly);%convert back to 3D array
precp_monthly.(['y',num2str(i+1981)]) = precip_monthly; % Create precip_monthly structure
end
4 comentarios
BN
el 28 de Oct. de 2019
Shubham Gupta
el 28 de Oct. de 2019
Oh, I am sorry. Can you try replace the for loop statement by :
for i = 1:length(precips) % "precips" instead of "precip"
BN
el 28 de Oct. de 2019
Categorías
Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
