如何在MATLAB中拆分白天与夜间时段的气温数据?
修正后的MATLAB代码及问题分析
原代码的核心错误
- 矩阵赋值逻辑错误:原代码直接将数据写入与原时间步对应的索引位置,导致矩阵中出现大量未赋值的空缺(如第一天赋值1-13后,14-24位置为NaN),最终第三维尺寸等于最后一天的时间步索引,而非有效数据的总数。
- 未按需求拼接数据:没有将每天的目标时段数据按顺序整合,反而保留了原时间步的分散索引结构,不符合“拆分出仅含昼夜时段的连续矩阵”的需求。
正确代码实现
% 定义基础参数 num_hours_per_day = 24; total_timesteps = size(ST_data, 3); num_days = total_timesteps / num_hours_per_day; % 1176/24=49天,确保能整除 % 初始化昼夜时段的时间步索引向量 daytime_indices = []; nighttime_indices = []; % 遍历每一天,收集对应时段的索引 for day_offset = 0 : num_days - 1 current_base = day_offset * num_hours_per_day; % 白天:UTC时间步 current_base+1 到 current_base+13(对应IST 6:30-18:30) daytime_indices = [daytime_indices, current_base + 1 : current_base + 13]; % 夜间:UTC时间步 current_base+13 到 current_base+24(对应IST 18:30-次日5:30) nighttime_indices = [nighttime_indices, current_base + 13 : current_base + 24]; end % 提取昼夜数据矩阵 daytime_matrix = ST_data(:,:,daytime_indices); nighttime_matrix = ST_data(:,:,nighttime_indices);
尺寸验证
daytime_matrix尺寸:303×185×637(49天×13个白天时间步)nighttime_matrix尺寸:303×185×588(49天×12个夜间时间步)
可选调整(去除重叠时间步)
如果不需要两个矩阵共享UTC13(IST18:30)这个时间点,可将白天的索引范围改为current_base + 1 : current_base + 12,此时昼夜矩阵的第三维均为588,总时间步与原数据完全匹配。
内容的提问来源于stack exchange,提问作者Ankan Sarkar
相关产品推荐
相关产品推荐

