python - 如何在 3d 数组上执行 xarray 中的函数,预先过滤它以获取预定义节点?
问题描述
我在将函数应用于xarray.dataset
. 我有气候数据,我想计算某个区域的加权平均值(点列表中的坐标)。该示例串行运行,但我不知道如何在 dask 集群上并行执行。
结果应该是每个坐标列表的时间序列。因此,这不应作为返回值使用,而必须存储在 MongoDB 中。
import xarray as xr
import numpy as np
nlats = 10
nlons = 8
ntimes = 100
ctime = range(ntimes)
clat = range(nlats)
con = range(nlons)
tas = np.random.randn(ntimes, nlats, nlons)
pr = np.random.rand(ntimes, nlats, nlons)
ds = xr.Dataset(
data_vars=dict(
tas=(["time", "lat", "lon"], tas),
pr=(["time", "lat", "lon"], pr),
),
coords=dict(
time=ctime,
),
)
pointlist = [
[(c[0], c[1]) for c in zip(np.random.randint(0,nlats, 4),np.random.randint(0,nlons, 4))],
[(c[0], c[1]) for c in zip(np.random.randint(0,nlats, 3),np.random.randint(0,nlons, 3))],
[(c[0], c[1]) for c in zip(np.random.randint(0,nlats, 5),np.random.randint(0,nlons, 5))]
]
def calc_mean(df, points):
points = np.array(points)
dssel = df.tas.isel(lat=xr.DataArray(points[:,0], dims="sel"),
lon=xr.DataArray(points[:,1], dims="sel"))
return dssel.mean(dim='sel')
results = [calc_mean(ds.tas, points) for points in pointlist]
解决方案
推荐阅读
- node.js - 防止图像加载的内容安全策略
- javascript - 分享不带空格的链接 JavaScript
- git - 远程:在 mac 终端中找不到存储库错误
- c# - 使用 Autofac 创建/解析对象列表
- python - 使用 Pandas 的多处理来读取、修改和写入数千个 csv 文件
- python - 根据条件自定义Django wrt中的下拉字段
- svelte - 如何在 Svelte 中单击一个组件中的按钮并触发另一个组件中的事件?
- javascript - 如何创建反应选择数组?
- javascript - 从本地 .txt 文件中读取数据并将其存储在变量中
- python - UnicodeDecodeError:“charmap”编解码器无法解码位置 49 中的字节 0x81:用于文本