xarray open_mfdataset 不 return 带有 Numpy 数据的数组

xarray open_mfdataset does not return arrays with Numpy data

我目前正在尝试打开多个 netCDF 文件。它们都具有相同的主要维度(即行数)和多个变量:时间、platform_code 和其他变量。

这是我用来尝试连接所有数据的代码:

ds_disk_merged = xarray.open_mfdataset([path1, path2, path3, path4], concat_dim="row", combine='nested')

当我取行时,一切正常:我找到我的 numpy 数组,按预期连接:

In [5]: ds_disk_merged.row.data
Out[5]: array([     0,      1,      2, ..., 968041, 968042, 968043])

但是当我使用其中一个变量时,无法访问任何内容:

In [6]: ds_disk_merged.time.data
Out[6]: dask.array<concatenate, shape=(968044,), dtype=datetime64[ns], chunksize=(253158,), chunktype=numpy.ndarray>

您知道如何按照与我的行相同的过程连接所有变量数据吗?

作为信息,我的文件的行数(逐个路径)是这样的:

In [7]: all_nc_files_number_of_rows 
Out[7]: [249499, 232995, 232392,253158]

您有一个 dask.array, which is a chunked, scheduled (but not in-memory) set of multiple numpy arrays. In addition to providing a labeled indexing interface to arrays, xarray has the ability to work with multiple backends, which form the computational engine underlying the array operations on the .data attribute. When you use xr.open_mfdataset the result will always be a chunked dask array. See the xarray docs on Parallel Computing with Dask 以获取更多信息。

您可以使用 ds_disk_merged = ds_disk_merged.compute() 转换为 numpy。请注意,在您触发这样的计算之前,不会发生读取 netCDF 数据的工作 - 直到那时 dask 只会 安排 操作。因此,您可能只会 运行 在执行作业时遇到诸如读取错误、内存瓶颈或其他工作流问题之类的问题,而不是真正导致问题的代码行。有关此概念的介绍,请参阅 dask docs on lazy execution

对于初学者,请使用 ds_disk_merged[variable_name].data.nbytes 检查数组的大小,并确保在调用 compute().

之前可以将其轻松放入内存中