加快 xarray 的 fillna

Speeding up xarray's fillna

我有一个相当大的 netCDF 文件 (~10 GB),其填充值为 -1.0

当我像这样使用 xarray 的 fillna 时:

hndl_nc = hndl_nc.fillna(0.0)

它很慢(~2 分钟),是否有其他运算符可能更快?或者,鉴于文件的大小,这是可以预期的?

速度约为 85MB/s,这是矢量化 NumPy/xarray 操作的典型性能范围。我认为你不太可能通过简单地使用另一个 built-in 操作来显着改进这一点。

您也许仍然可以通过一些实验来提高性能。要做的第一件事是分析和查看 CPU 使用情况以确定时间花在了哪里。

  • 如果您 CPU 受限于 Python:尝试使用 Dask 来并行化操作,如果您还没有使用它的话
  • 如果您 CPU 绑定在 netCDF/HDF5 进程中:这可能是使用 in-file zlib 压缩(速度非常慢)的 netCDF4 文件的症状。要么提前将你的数据加载到内存中(使用 .load()),重写你的文件而不压缩,或者尝试使用 xarray v0.9.0 或更新版本(目前在候选版本中)与 Dask 分布式或 multi-processing.
  • 如果您受 IO 限制,请考虑:
    • engine='scipy' 可以更快,如果你有 netCDF3 文件
    • 切换到 scale_factor/add_offset 以压缩 int16 中的数据,而不是更大的浮点类型