我有兩個資料集,第一個是高空間解析度,它的值為 0 和 1,第二個資料集有粗略的空間解析度資料(它的值在我的情況下并不重要)。
我想從高解析度資料中計算最接近粗解析度資料網格點的網格點數,其中高解析度資料的值為 1。
換句話說,計算屬于粗解析度資料像素內的值為 1 的高解析度網格點的數量。
粗略空間解析度資料的資料示例
lon = [ 176.25, 176.75, 177.25, 177.75, 178.25, 178.75, 179.25, 179.75]
lat = [-87.25, -87.75, -88.25, -88.75, -89.25, -89.75]
temperature = np.random.rand(6, 8)
coarse_res = xr.DataArray(temperature, coords={'lat': lat,'lon': lon}, dims=["lat", "lon"])
高空間解析度資料的資料示例
lon = [176.125,176.375,176.625,176.875,177.125,177.375,177.625,177.875,178.125,178.375,178.625,178.875,179.125,179.375,179.625,179.875]
lat = [-87.125, -87.375, -87.625, -87.875, -88.125, -88.375, -88.625, -88.875, -89.125, -89.375, -89.625, -89.875]
ds_2 = np.random.randint(0, 2, size=(12, 16))
high_res = xr.DataArray(ds_2, coords={'lat': lat,'lon': lon}, dims=["lat", "lon"])
最后,我想計算圍繞粗解析度網格點的值為 1 的高解析度網格點/像素的分數。例如,如果coarse_res資料的第一個網格點被 4 個網格點包圍,high-res并且這些值0, 1, 1, 1的分數應該是 0.75。
uj5u.com熱心網友回復:
你可以這樣做xr.Dataset.groupby_bins:
low_lon_edges = np.arange(176., 178.001, 0.5)
low_lat_edges = np.arange(-90, -86.9, 0.5)
low_lon_centers = (low_lon_edges[:-1] low_lon_edges[1:]) / 2
low_lat_centers = (low_lat_edges[:-1] low_lat_edges[1:]) / 2
aggregated = (
high_res
.groupby_bins('lon', bins=low_lon_edges, labels=low_lon_centers)
.sum(dim="lon")
.groupby_bins('lat', bins=low_lat_edges, labels=low_lat_centers)
.sum(dim="lat")
)
此外,如果單元完美嵌套(看起來您正在處理都以半單元為中心的 1/4 和 1/2 度資料,所以這應該可以正常作業)您可以使用xr.Dataset.coarsen:
aggregated = ds.coarsen(lat=2, lon=2, boundary="exact").sum()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/519628.html
上一篇:Pandasgroupby基于標志值的累積總和,平均值,中位數
下一篇:如何計算列和分組中的值
