为什么此for循环无法正常工作?

时间:2020-03-31 21:51:44

标签: matlab

我在下面有以下代码:

for i = 1:numel(Class1_mon_avg_synop) %size of Class1_mon_avg_synop is 1 x 12 cell
    ave(i) = Class1_mon_avg_synop{1,i}.sum_rrr24(1); % first row in sum_rrr24 is for January
    Jan_class1_avg{i,1} = ave(i);
end
for i = 1:numel(Class1_mon_avg_grid) %size of Class1_mon_avg_grid is 1 x 12 cell
    ave(i) = Class1_mon_avg_grid{1,i}.sum_precip(1);% first row in sum_precip is for January
    Jan_class1_avg{i,2} = ave(i);
end


% Do same for next month


for i = 1:numel(Class1_mon_avg_synop)
    ave(i) = mean(Class1_mon_avg_synop{1,i}.sum_rrr24(2)); % second row in sum_rrr24 is for February                    
    Feb_class1_avg{i,1} = ave(i);
end
for i = 1:numel(Class1_mon_avg_grid)
    ave(i) = mean(Class1_mon_avg_grid{1,i}.sum_precip(2)); % second row in sum_rrr24 is for February                      
    Feb_class1_avg{i,2} = ave(i);
end
% do same for all other month
% ...

由于我应该计算所有12个月的时间,因此我将其写为for循环:

for i = 1:numel(Class1_mon_avg_synop)
    ave(i) = Class1_mon_avg_synop{1,i}.sum_rrr24(i);
    ave(i) = Class1_mon_avg_grid{1,i}.sum_precip(i);
    ALLMONTHS_class1_avg{i,i} = ave(i);
    ALLMONTHS_class1_avg{i,i+1} = ave(i);  
end

但是不幸的是,我得到了错误的答案:

Screen grab showing the contents of the cell array

因为我认为它必须是12 x 24格。一月的第一栏和第二栏,二月的第三栏和第四栏,等等...

1 个答案:

答案 0 :(得分:0)

我认为我发现了两个问题: (a)超越ave(i),并且(b)将值放在ALLMONTHS_class1_avg{i,i}ALLMONTHS_class1_avg{i,i+1}中,所以它们是对角线和对角线上方的行。 根据您的示例,您最终应该拥有一个12 x 2的单元。

我建议这样:

for i = 1:numel(Class1_mon_avg_synop)
    ave_1(i) = Class1_mon_avg_synop{1,i}.sum_rrr24(i);
    ave_2(i) = Class1_mon_avg_grid{1,i}.sum_precip(i);
    ALLMONTHS_class1_avg{i,1} = ave_1(i);
    ALLMONTHS_class1_avg{i,2} = ave_2(i);  
end