dataset数据的创建

用一个简单的二次线性插值的例子来演示这种格式的创建(真的好麻烦)

def double_linear(filename, tp):
    # print(tp)
    date = tp.variables['date']
    longitude = tp.coords['longitude']
    latitude = tp.coords['latitude']
    longitude1 = longitude + 0.25
    latitude1 = latitude + 0.25
    for i in range(len(latitude) - 1):
        latitude1[i] = (latitude[i] + latitude[i + 1]) / 2
    data1 = np.zeros((len(tp.coords["date"]), len(tp.coords["latitude"]), len(tp.coords["longitude"])))
    for i in range(len(tp.coords["date"])):
        print("date=", tp.coords["date"][i])
        for j in range(len(tp.coords["latitude"]) - 1):
            for k in range(len(tp.coords["longitude"]) - 1):
                data1[i][j][k] = (tp[filename][i][j][k] + tp[filename][i][j + 1][k]
                                  + tp[filename][i][j][k + 1] + tp[filename][i][j + 1][k + 1]) * 0.25
    tp1 = xr.Dataset({filename: (["date", "latitude", "longitude"], data1)},
                     coords={"date": date, "latitude": latitude1, "longitude": longitude})
    lon_min = 85.0
    lon_max = 105.0
    lat_min = 20.0
    lat_max = 40.0
    tp1 = tp1.sel(latitude=slice(lat_max, lat_min), longitude=slice(lon_min, lon_max))
    return tp1

 发现上面访问变量的方法太睿智了,简直就是龟速不知道为什么python这么神(niu)奇(ma)

可以把访问变量先用variable提取出来, 可以快不少

dataset = tp.variables[filename][:]
    for i in range(len(tp.coords["date"])):
        print("date=", tp.coords["date"][i])
        for j in range(len(tp.coords["latitude"]) - 1):
            for k in range(len(tp.coords["longitude"]) - 1):
                data1[i][j][k] = (dataset[i][j][k] + dataset[i][j + 1][k]
                                  + dataset[i][j][k + 1] + dataset[i][j + 1][k + 1]) * 0.25

 

posted @ 2023-07-13 13:46  yccdu  阅读(40)  评论(0编辑  收藏  举报