1

我正在创建一个函数以在分析工作室中使用多个矩阵。

这些矩阵具有相同的名称,名称中带有日期引用(月到月和年到年:nov-1956 是matrix5611, dec-1956 是matrix5612, jan-1957 是matrix5712,依此类推,直到 1999 年底。

对于每个人,都应该比较每个月/年的平均值(取决于您关注的研究领域)。

我正在尝试使用一些循环来改变输入矩阵的名称,而不是按日期手动编写日期,但是一个有用的函数会很有用。

任何想法或有用的功能?

4

2 回答 2

0

如果您将数据存储在不同的矩阵中,则可以使用eval将平均值存储到某个矩阵中,在此示例MeanMatrix中,其中 Y 维是年,X 维是月:

编辑:它不是来自 5611 的运行号码,而是 yymm ......

编辑:似乎矩阵不是从 1956 年 1 月开始,而是从 1956 年 11 月开始。

% add here missing months matrix index strings.

MissingMatricesCellArray = {'5601', '5602', '5603', '5604', '5605', '5606', '5607', '5608', '5609', '5610'};

% MissingmatricesCellArray = {};

for Year = 56:99
    for Month = 1:12
        NumString = sprintf('%02d%02d', Year, Month);

        % calculate and store means only for matrices that are not missing.
        if ~(ismember (cellstr(NumString), MissingMatricesCellArray))
            MeanMatrix(Year,Month) = mean(mean(eval ([ 'matrix', NumString ])));
        end
     end
end

然后,您可以按照自己的方式比较月份和年份的平均值。

于 2012-05-07T20:24:00.583 回答
0

我更愿意为此使用单元数组而不是eval.

for y = 56:99 % for each year 
    for m = 1:12 % for each month    
      ind = createYearMonthInd(y,m);
      matrix{ind} = ...  % whatever you want here (note the curly braces)
   end 
end 


function ind = createYearMonthInd(y,m)
     ind = y * 100 + m;
于 2012-05-07T20:30:49.927 回答