How to write a LOOP for this case?
显示 更早的评论
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
采纳的回答
更多回答(1 个)
Shubham Gupta
2019-10-28
编辑:Shubham Gupta
2019-10-28
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 个评论
BN
2019-10-28
Shubham Gupta
2019-10-28
Oh, I am sorry. Can you try replace the for loop statement by :
for i = 1:length(precips) % "precips" instead of "precip"
BN
2019-10-28
类别
在 帮助中心 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
