如何在 MATLAB 中创建白天和夜间的单独数据?

问题描述 投票:0回答:1

我有模型输出的每小时表面温度数据。数据是一个3D矩阵,大小为303×185×1176(经度×纬度×时间)。现在,我必须根据现有数据创建两个矩阵。一个矩阵仅适用于白天时间(6.30 AM - 6.30 PM),另一个矩阵仅适用于夜间时间(6.30 PM - 5.30 AM)。由于模型输出的时间步长采用 UTC,因此我必须将 5.30 与模型小时相加才能获得 IST(印度标准时间)。因此,在我的例子中,对于第一天,白天时间从时间步长 1 到 13 开始,夜间时间从时间步长 13 到 24 开始。因此,我们必须在上述时间步长范围中添加 24 小时以获得白天和第二天的夜间时间。同样,对于第二天的第二天,我们必须在第一个时间步长范围中添加 48 小时,以获得白天和夜间时间,依此类推。我尝试使用以下 MATLAB 代码:

num_hours_per_day = 24;
num_days = size(ST_data, 3) / num_hours_per_day; 
daytime_start = 1; % Initial daytime start timestep
nighttime_start = 13; % Initial nighttime start timestep
num_hours = size(ST_data, 3);
% Initialize daytime and nighttime matrices
daytime_matrix = [];
nighttime_matrix = [];
% Loop through each day
for day = 1:num_days
    % Calculate indices for daytime and nighttime hours
    daytime_indices = daytime_start:daytime_start+12; % Daytime hours (01:00 to 13:00)
    nighttime_indices = nighttime_start:nighttime_start+11; % Nighttime hours (14:00 to 24:00)
    
    % Update daytime and nighttime matrices
    daytime_matrix(:,:,daytime_indices) = ST_data(:,:,daytime_indices);
    nighttime_matrix(:,:,nighttime_indices) = ST_data(:,:,nighttime_indices);
    
    % Update start timesteps for the next day
    daytime_start = daytime_start + 24;
    nighttime_start = nighttime_start + 24;
end

但是,我认为我的代码不正确。因为,运行代码后,daytime_matrix的大小为303×185×1165,nighttime_matrix的大小为303×185×1176。如果我将总时间分为白天和夜间,那么每个矩阵的第三维的大小应该几乎是总时间步长的一半。那么,有人可以帮我根据上述计算创建正确的 MATLAB 代码吗?这对我很有帮助。感谢您的时间和考虑。

致以问候,

安康

matlab model
1个回答
0
投票

% 用正确的大小初始化白天和夜间矩阵 daytime_matrix = Zeros(大小(ST_data, 1), 大小(ST_data, 2), num_hours); nighttime_matrix = Zeros(size(ST_data, 1), size(ST_data, 2), num_hours);

% 循环浏览每一天 对于天 = 1:num_days % 计算白天和夜间的指数 daytime_indices = mod(daytime_start-1, num_hours_per_day) + 1; % 如果需要的话回到一天的开始 nighttime_indices = mod(nighttime_start-1, num_hours_per_day) + 1; % 如果需要的话,回到一天的开始

% Update daytime and nighttime matrices
daytime_matrix(:,:,daytime_indices) = ST_data(:,:,daytime_indices);
nighttime_matrix(:,:,nighttime_indices) = ST_data(:,:,nighttime_indices);

% Update start timesteps for the next day
daytime_start = daytime_start + num_hours_per_day;
nighttime_start = nighttime_start + num_hours_per_day;

结束

% 从矩阵中删除尾随零以确保大小正确 daytime_matrix = daytime_matrix(:,:,1:num_hours); nighttime_matrix = nighttime_matrix(:,:,1:num_hours);

© www.soinside.com 2019 - 2024. All rights reserved.