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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:30:16