加速xarray的fillna

时间:2017-01-22 19:46:43

标签: python performance python-xarray fillna

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

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

hndl_nc = hndl_nc.fillna(0.0)

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

1 个答案:

答案 0 :(得分:3)

在~85MB / s时,这是在矢量化NumPy / xarray操作的典型性能的球场。我认为通过简单地使用另一种内置操作,你不太可能明显改善这一点。

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

  • 如果您在Python中绑定了CPU:尝试使用Dask来并行化操作,如果您还没有使用它
  • 如果你在netCDF / HDF5进程中绑定了CPU:这可能是带有文件内zlib压缩的netCDF4文件的症状(这很慢)。将数据提前加载到内存中(使用.load()),不压缩地重写文件,或尝试使用Dask分布式或多处理的xarray v0.9.0或更新版本(当前处于候选版本中)。
  • 如果您受到IO约束,请考虑:
      如果你有netCDF3文件,
    • engine='scipy'会更快
    • 切换到scale_factor / add_offset以压缩int16中的数据,而不是更大的浮动类型
相关问题