You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 03:32:09