如何在Matlab中计算20年时间序列的月平均温度(结果为12×20矩阵)
Matlab计算20年月平均温度(输出12行20列矩阵)
假设你的原始数据存储在名为temp_data的矩阵中,第一列为日期数据(支持datetime类型或可被datevec解析的数值/字符串),第二列为对应每日温度。以下是两种实现方案:
方案1:高效分组聚合(推荐)
利用accumarray直接按月份+年份分组计算均值,代码简洁高效:
% 1. 将日期转换为年份和月份 [year_num, month_num] = datevec(temp_data(:,1)); % 2. 将年份转换为列索引(2001年对应第1列,2020年对应第20列) year_idx = year_num - 2000; % 3. 按(月份,年份索引)分组,计算月平均温度 monthly_avg = accumarray([month_num, year_idx], temp_data(:,2), [12,20], @mean, NaN);
- 输出矩阵
monthly_avg的行代表1-12月,列代表2001-2020年; - 参数
NaN用于填充无数据的月份(如果存在),可根据需求替换为其他值。
方案2:循环遍历(适合新手理解)
通过嵌套循环逐个年份、月份筛选数据并计算均值:
% 1. 初始化结果矩阵(12行20列,初始值为NaN) monthly_avg = nan(12,20); % 2. 将日期转换为年份和月份 [year_num, month_num] = datevec(temp_data(:,1)); % 3. 遍历每一年和每个月 for col = 1:20 current_year = 2000 + col; for row = 1:12 % 筛选当前年份+月份的温度数据 data_mask = (year_num == current_year) & (month_num == row); % 计算均值(仅当该月有数据时) if any(data_mask) monthly_avg(row, col) = mean(temp_data(data_mask, 2)); end end end
注意事项
如果你的日期是字符串格式,需要先转换为datetime类型再处理:
% 示例:假设日期格式为"yyyy-MM-dd",根据实际格式调整InputFormat dates = datetime(temp_data(:,1), 'InputFormat', 'yyyy-MM-dd'); [year_num, month_num] = datevec(dates);
内容的提问来源于stack exchange,提问作者Sorena
相关产品推荐
相关产品推荐

