使用以下代码读取大约 100 兆字节的 grb2 文件需要 5 分钟:
import cfgrib
datasets = cfgrib.open_datasets(grib_path, backend_kwargs={'indexpath': ''})
有什么方法或库可以让我更快地阅读这些文件吗?
这实际上是这里提出的一个烦人的问题。使用 12Mb Grib 文件,读取单个字段,cfgrib 需要 19 秒,而使用 pynio 需要 0.02 秒!超过900倍!
ps:parallel = True 结果:open_dataset() 得到了一个意外的关键字参数“parallel”
带有 pynio 的代码:
import time
import Nio
import xarray as xr
start = time.time()
filename = "full_path_to_the_grb2_file"
parameter = "parameter_name"
ds = xr.open_dataset(filename, engine="pynio")
var = ds.get(parameter)
end = time.time()
print("Elapsed time = ", round(end-start,5))
带有 cfgrib 的代码:
import time
import cfgrib
import xarray as xr
start = time.time()
filename = "full_path_to_the_grb2_file"
parameter = "parameter_name"
start = time.time()
ds = xr.open_dataset(filename, engine="cfgrib", backend_kwargs={"indexpath":""})
var = ds.get(parameter)
end = time.time()
print("Elapsed time = ", round(end-start,5))
例如,如果您尝试使用 GFS-wave (NOMADS) 中的 grib2 文件:
filename = "gfswave.txxz.global.0p25.f000.grib2"
对于参数:组合风浪和涌浪的显着高度
parameter = "HTSGW_P0_L1_GLL0" # with pynio"
parameter = "swh" # corresponding parameter with cfgrib
您可以激活并行读取以提高读取速度:
import xarray
data = xarray.open_dataset(grib_path, engine='cfgrib', parallel=True)