多维数组遍历:提取经纬度网格点时间序列并调用函数
解决多维网格时间序列提取问题
首先,你当前代码的问题在于多维数组的索引方式错误,链式的[:][x][y]写法不符合多维数组(如numpy数组)的索引逻辑,容易导致维度顺序混乱,无法正确提取目标网格的时间序列。
步骤1:确认数据维度顺序
先打印你的sst数据的维度形状,明确各维度的顺序:
print(m.sst.shape)
假设输出为(29, 4, 8),则维度顺序为(time, lat, lon);如果输出是(29, 8, 4),则维度顺序为(time, lon, lat)。
步骤2:修正索引提取时间序列
根据维度顺序,调整循环内的索引方式:
- 如果维度是
(time, lat, lon):for x in range(len(m.lon)): # x是经度索引 for y in range(len(m.lat)): # y是纬度索引 # 提取第y个纬度、第x个经度对应的所有时间点数据 sst_time_series = m.sst[:, y, x] mhws, clim = mhw.detect(t_x, sst_time_series, pctile=90, alternateClimatology=[t_c, sst_c]) - 如果维度是
(time, lon, lat):for x in range(len(m.lon)): # x是经度索引 for y in range(len(m.lat)): # y是纬度索引 # 提取第x个经度、第y个纬度对应的所有时间点数据 sst_time_series = m.sst[:, x, y] mhws, clim = mhw.detect(t_x, sst_time_series, pctile=90, alternateClimatology=[t_c, sst_c])
关键说明
多维数组的正确索引方式是用逗号分隔各维度的索引,[:, y, x]表示:
:取所有时间维度的数据y取第y个纬度的切片x取第x个经度的切片
这样就能精准得到单个网格点对应的29天时间序列。
内容的提问来源于stack exchange,提问作者Matthew Chinappa
相关产品推荐
相关产品推荐

