我正在创建一个函数以在分析工作室中使用多个矩阵。
这些矩阵具有相同的名称,名称中带有日期引用(月到月和年到年:nov-1956 是matrix5611
, dec-1956 是matrix5612
, jan-1957 是matrix5712
,依此类推,直到 1999 年底。
对于每个人,都应该比较每个月/年的平均值(取决于您关注的研究领域)。
我正在尝试使用一些循环来改变输入矩阵的名称,而不是按日期手动编写日期,但是一个有用的函数会很有用。
任何想法或有用的功能?
如果您将数据存储在不同的矩阵中,则可以使用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
然后,您可以按照自己的方式比较月份和年份的平均值。
我更愿意为此使用单元数组而不是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;