基于MJD列值的18天滑动窗口分组Matlab实现求助
基于MJD值的18天滑动窗口分组保存方案(Matlab)
1. 读取原始数据
先把你的气候数据文本文件读入Matlab,这里用readmatrix(新版本Matlab适用,老版本可换importdata):
% 替换成你的实际数据文件名,比如'climate_data.txt' data = readmatrix('你的数据文件名.txt'); MJD_col = data(:, 1); % 提取第一列的MJD值 value_col = data(:, 2); % 提取第二列的气候数据
2. 遍历MJD滑动窗口并保存数据
核心逻辑是先获取所有不重复的MJD值,再逐个以每个MJD为起点,取往后17天(凑够18天窗口)的所有数据,最后按要求命名保存:
% 获取所有唯一的MJD值,自动按升序排列 unique_MJD = unique(MJD_col); % 计算可滑动的起始MJD数量:总唯一MJD数减17,保证最后一个窗口能覆盖完整18天 max_start_idx = length(unique_MJD) - 17; % 循环处理每个起始MJD for i = 1:max_start_idx current_start = unique_MJD(i); window_end = current_start + 17; % 18天窗口:包含current_start到current_start+17的所有MJD % 筛选窗口内的所有数据行 in_window = (MJD_col >= current_start) & (MJD_col <= window_end); window_data = data(in_window, :); % 生成指定格式的文件名 filename = sprintf('%d+18day.txt', current_start); % 保存数据到文本文件,用空格分隔(和原始文件格式一致) writematrix(window_data, filename, 'Delimiter', ' '); % 可选:打印进度,方便查看运行状态 fprintf('已生成文件:%s\n', filename); end
3. 新手注意事项
- 若你的Matlab版本低于R2019a,把
writematrix换成dlmwrite(filename, window_data, ' ')即可。 - 代码完全基于MJD数值判断窗口范围,和数据行数无关,同一MJD的多条数据会被全部纳入对应窗口。
- 即使存在MJD不连续(某天无数据)的情况,代码依然能正确筛选出窗口内有数据的所有记录。
内容的提问来源于stack exchange,提问作者55na
相关产品推荐
相关产品推荐

