1

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

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

hndl_nc = hndl_nc.fillna(0.0)

它很慢(约 2 分钟),是否有另一个可能更快的操作员?或者,考虑到文件的大小,这是可以预料的?

4

1 回答 1

3

大约 85MB/s,这是向量化 NumPy/xarray 操作的典型性能。我认为您不太可能通过简单地使用另一个内置操作来显着改善这一点。

您可能仍然可以通过一些实验来提高性能。首先要做的是分析并查看 CPU 使用情况,以确定时间花在哪里。

  • 如果您在 Python 中受 CPU 限制:尝试使用 Dask 来并行化操作,如果您还没有使用它
  • 如果您在 netCDF/HDF5 进程中受 CPU 限制:这可能是 netCDF4 文件具有文件内 zlib 压缩(非常慢)的症状。提前将数据加载到内存中(使用.load()),在不压缩的情况下重写文件,或者尝试使用带有 Dask 分布式或多处理的 xarray v0.9.0 或更高版本(当前处于候选版本中)。
  • 如果您受 IO 限制,请考虑:
    • engine='scipy'可以更快,如果你有 netCDF3 文件
    • 切换到scale_factor/add_offset以压缩数据int16而不是更大的浮点类型
于 2017-01-22T23:26:22.750 回答