如何将维度为(37, 121, 152)的三维地理时序数组切片并存储为含37个键的字典
解决方案:三维时序地理数组切片并存储为字典
没问题,我来给你梳理一下具体的实现步骤,不管你用的是NumPy还是xarray这类常用的地理数据处理库,都可以轻松实现需求:
假设你的数组用NumPy存储(最常见的场景)
1. 先准备数据(如果已经有现成数组,这步可以跳过)
import numpy as np # 模拟你的三维数组:形状为(37, 121, 152),对应[时间, 纬度, 经度] time_lat_lon_data = np.random.rand(37, 121, 152)
2. 切片并构建目标字典
这里给你两种键的命名方案,按需选择:
方案A:用数字索引作为键(比如0到36,对应第0天到第36天)
daily_data_dict = {} # 遍历时间维度的每个索引 for day_idx in range(time_lat_lon_data.shape[0]): # 切片取出当天的纬度-经度二维数组 daily_slice = time_lat_lon_data[day_idx, :, :] # 存入字典 daily_data_dict[day_idx] = daily_slice
方案B:用可读性更强的命名作为键(比如"day_1"到"day_37")
daily_data_dict = {} for day_num in range(1, 38): # 数组索引从0开始,所以要减1定位到对应时间片 daily_slice = time_lat_lon_data[day_num - 1, :, :] daily_data_dict[f"day_{day_num}"] = daily_slice
3. 验证结果是否符合预期
你可以通过以下代码确认字典的结构:
# 打印所有键,应该看到37个元素 print(daily_data_dict.keys()) # 打印任意一个值的形状,应该是(121, 152) print(daily_data_dict[0].shape) # 对应方案A # 或者 print(daily_data_dict["day_1"].shape) 对应方案B
如果你的数组用Xarray存储(地理数据常用库)
如果是用xarray的DataArray/Dataset格式,处理会更直观:
import xarray as xr # 假设你的数据是xarray的DataArray da = xr.DataArray( time_lat_lon_data, dims=["time", "lat", "lon"], coords={"time": range(37), "lat": range(121), "lon": range(152)} ) # 用字典推导式快速生成目标字典 daily_data_dict = {f"day_{i+1}": da.isel(time=i) for i in range(37)}
内容的提问来源于stack exchange,提问作者ldlg
相关产品推荐
相关产品推荐

