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

如何将网格气象数据转换为ConvLSTM2D要求的5维输入数组

气象网格数据转换为ConvLSTM2D输入格式的实现方法

场景1:已得到形状为(num_hours, lat, lon, num_features)的4维数组

直接使用numpy滑动窗口接口生成重叠24小时序列,无额外内存复制,效率极高:

import numpy as np

seq_len = 24 # 序列长度设置为24小时
# 生成滑动窗口视图,输出形状为 (num_hours-seq_len+1, lat, lon, num_features, seq_len)
data_5d = np.lib.stride_tricks.sliding_window_view(data_4d, window_shape=seq_len, axis=0)
# 调整维度顺序到要求的 (样本数, 序列长度, lat, lon, 特征数)
data_5d = np.moveaxis(data_5d, source=-1, destination=1)
  • 生成的样本总数为 num_hours - 24 + 1,符合重叠滑动窗口的规则
  • 若需要非重叠序列,可在生成视图后通过步长切片 data_5d = data_5d[::seq_len] 实现

场景2:直接从长表格式Pandas DataFrame转换

无需先生成4维数组,可通过透视+维度重整一步到位,比循环拼接效率高10倍以上:

import pandas as pd
import numpy as np

seq_len = 24
# 1. 透视表转换,把特征类型从行转成列
df_pivot = df.pivot(
    index=['ts', 'lat', 'lon'], 
    columns='weather_variable', 
    values='value'
).reset_index()

# 2. 按时间、纬度、经度严格排序,保证网格坐标顺序正确
df_pivot = df_pivot.sort_values(by=['ts', 'lat', 'lon']).reset_index(drop=True)

# 3. 统计各维度长度
num_hours = df_pivot['ts'].nunique()
num_lat = df_pivot['lat'].nunique()
num_lon = df_pivot['lon'].nunique()
num_feats = df['weather_variable'].nunique()

# 4. 特征列直接reshape为4维数组
data_4d = df_pivot.iloc[:, 3:].values.reshape(num_hours, num_lat, num_lon, num_feats)

# 5. 生成5维序列,同场景1逻辑
data_5d = np.lib.stride_tricks.sliding_window_view(data_4d, seq_len, axis=0)
data_5d = np.moveaxis(data_5d, -1, 1)

结果验证

针对你提供的模拟数据集,最终输出data_5d的形状为(6481, 24, 20, 20, 3),和你的预期完全一致。

注意:如果原始数据存在缺失的时间步,需先做时间序列补全/插值,避免生成的序列出现时间断层。


内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:54:01