【问题标题】:xarray dataset selection method is very slowxarray 数据集选择方法很慢
【发布时间】:2023-03-30 17:57:01
【问题描述】:

我有 37 年的 NetCDF 文件,其中包含每日时间步长,并在所有年份(13513 天)中为每个单元计算一个函数。对所有单元重复此函数的计算。为此,我使用xarrayda.sel 方法,但它非常慢并且没有使用我笔记本电脑的多个内核。我正在努力弄清楚如何在当前场景中使用 dask。有什么改进/加速代码的建议吗?

for c in range(len(df)):
    arr = np.array([])
    lon=df.X[c]
    lat=df.Y[c]
    for yr in range(1979,2016,1):
        ds = xr.open_dataset('D:/pr_'+str(yr)+'.nc')
        da = ds.var.sel(lon=lon, lat=lat, method='nearest')
        arr = np.concatenate([arr, da])

    fun = function(arr)

【问题讨论】:

  • 不惜一切代价避免嵌套循环。目前,您正在多次读取相同的文件(df 中的每一行一次)。让这两种方法相辅相成(读取数据并进行分析)。此外,最好也将循环之外的所有内容连接起来。

标签: python-3.x dask python-xarray


【解决方案1】:

您似乎在寻找xarray.open_mfdataset

ds = xr.open_dataset('D:/pr_*.nc')

您的代码特别慢,因为您反复调用np.concatenate。每次调用此函数时,您都必须复制到目前为止已加载的所有数据。这是成本的二次方。

【讨论】:

  • 正如@foxpal 建议的那样,删除嵌套循环很有帮助。此外,我使用xarray.open_mfdataset 外部循环一次读取所有数据并将其用于每个游标。使用这种方法,每个光标的处理时间从 1.1 秒减少到 0.02 秒
猜你喜欢
  • 2020-07-02
  • 1970-01-01
  • 2020-07-18
  • 2018-04-16
  • 2022-01-14
  • 1970-01-01
  • 2022-01-18
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多