0

我试图获得一个单列向量,它是我每年(10 年)的 X 值的月平均值。我正在使用 2 个连续的 for 循环 - 也许更简单的代码会让我得到每年的月平均值......?

好的 - 这是我的 matlab 代码:

   X = values;
   t = time values;
   timevec = datevec(t);
   years = timevec(:,1) ;
   yy = unique(years);
   month = timevec(:,2);
   mm = unique(month);

   for iyear = 1:length(yy);
         fy = find(years==yy(iyear));
         ym = month(fy);

        for imonth = 1:length(mm);
                fm = find(ym==mm(imonth));
                Xmean(imonth,iyear) = mean(X(fm));
         end
    end

但是,我想获得一个单列向量,而不是一个大小为 (length(imonth),length(iyear)) 的矩阵 - 所以类似于:

     Xmean(:) of size ((length(imonth*iyear)), 1)

这有意义吗?如果您能帮助我解决这个问题,我将不胜感激。

干杯,S。

4

1 回答 1

1

您应该使用accumarray自定义功能@mean

[~,~,yi] = unique( timevec(:,1) ); % year index, using unique to start with one.
mi = timevec(:,2); % month index
subs = 12*(yi-1) + mi; % month-year into a single vector index
Xmean = accumarray( subs(:), X(:), [], @mean );
Xmean(isnan(Xmean)) = 0; % remove mean([]) results.
于 2013-07-24T05:12:47.353 回答