标签: netcdf4

访问 Xarray 数据集时的 HDF5 警告

我想了解导致我在以下情况下收到警告消息的原因:

在之前的操作中,我创建了一些 NetCDF 文件并使用xarray.to_netcdf().

在 jupyter 笔记本中对这些数据集进行惰性评估完全没问题,并且在以下情况下我不会收到警告/错误:

  • .nc通过打开这些文件ds = xarray.open_mfdataset('/path/to/files/*.nc')
  • 通过以下方式将尺寸数据加载到内存中ds.time.values
  • 惰性选择通过ds.sel(time=starttime)

我似乎能够在对内存加载的数据进行计算时做我想做的一切。但是,我经常在以下情况下收到相同的错误集:

  • 通过加载数据来绘图ds.sel(time=starttime).SCALAR_DATA.plot()
  • 通过提取/加载数据ts = pd.Series(ds.SCALAR_DATA.loc[:,y,x], index=other_data.index)

请注意,尽管有这些警告,我执行的操作确实会产生预期的结果(绘图、时间序列结构等)。

生成以下错误的共同点似乎是从打开的数据集中加载数据。编辑:经过一些进一步的实验,我的工作环境中的软件包版本可能会导致依赖 HDF5 的软件包版本之间发生一些冲突。

以下错误重复多次。

HDF5-DIAG: Error detected in HDF5 (1.12.2) thread 1:
  #000: H5A.c line 528 in H5Aopen_by_name(): can't open attribute
    major: Attribute
    minor: Can't open object
  #001: H5VLcallback.c line 1091 in H5VL_attr_open(): attribute open failed
    major: Virtual Object Layer
    minor: Can't open object
  #002: H5VLcallback.c line 1058 in H5VL__attr_open(): attribute open failed …
Run Code Online (Sandbox Code Playgroud)

hdf5 netcdf python-xarray netcdf4

12
推荐指数
3
解决办法
3229
查看次数

ValueError: found the following matches with the input file in xarray's IO backends: ['netcdf4', 'h5netcdf']

So I'm trying to run this script in Spyder (Python 3.9)

dset = xr.open_dataset(filename, decode_times=True, use_cftime=True)
print(dset)
Run Code Online (Sandbox Code Playgroud)

But I keep on getting this error:

ValueError: found the following matches with the input file in xarray's IO backends: ['netcdf4', 'h5netcdf']. But their dependencies may not be installed, see:
https://docs.xarray.dev/en/stable/user-guide/io.html 
https://docs.xarray.dev/en/stable/getting-started-guide/installing.html
Run Code Online (Sandbox Code Playgroud)

I have already installed via conda the ['netcdf4', 'h5netcdf'].

Did anyone run on the same issue? I have tried this also:

conda install -c anaconda netcdf4 h5netcdf scipy pydap zarr fsspec …
Run Code Online (Sandbox Code Playgroud)

python dependencies netcdf4

10
推荐指数
1
解决办法
1万
查看次数

如何最好地将 NetCDF 文件集合重新分块到 Zarr 数据集

我正在尝试重新整理 NetCDF 文件集合并在 AWS S3 上创建 Zarr 数据集。我有 168 个原始 NetCDF4 经典文件,其维度数组time: 1, y: 3840, x: 4608分块为chunks={'time':1, 'y':768, 'x':922}.

我想将此输出写入 Zarr,并且我想针对时间序列提取进行优化,因此在我的块中包含更多时间记录。我想我会使用 xarray 来帮助完成工作,因为我有很多处理器可以利用 Dask,而 xarrayxr.open_mfdatasetds.to_zarr.

我第一次尝试rechunking来chunks={'time':24, 'y':768, 'x':922}匹配输入NetCDF4在分块xy,但是当我试图写Zarr它抱怨,因为它需要在两个均匀的块大小xy,只允许非均匀大小沿的最后一块time尺寸(不幸在x维度中,总大小 4608 不是块大小 922 的倍数。

然后我尝试chunks={'time':168, 'y':384, 'x':288}并开始工作,并且非常快速地进行了几分钟,然后变得越来越慢。最终在 50 分钟后,集群死亡:

4072 distributed.core - INFO - Event loop was unresponsive in Worker for 1.41s.  This is often caused by long-running …
Run Code Online (Sandbox Code Playgroud)

python python-xarray netcdf4 dask-distributed zarr

8
推荐指数
1
解决办法
1198
查看次数

xarray/dask - 限制线程数/CPU

我对 xarray 相当陌生,我目前正在尝试利用它来对某些 NetCDF 进行子集化。我在共享服务器上运行它,想知道如何最好地限制 xarray 使用的处理能力,以便它与其他人很好地合作。我已经阅读了 dask 和 xarray 文档,但我似乎不清楚如何设置 cpus/线程的上限。以下是空间子集的示例:

import glob
import os
import xarray as xr

from multiprocessing.pool import ThreadPool
import dask

wd = os.getcwd()

test_data = os.path.join(wd, 'test_data')
lat_bnds = (43, 50)
lon_bnds = (-67, -80)
output = 'test_data_subset'

def subset_nc(ncfile, lat_bnds, lon_bnds, output):
    if not glob.os.path.exists(output):
        glob.os.makedirs(output)
    outfile = os.path.join(output, os.path.basename(ncfile).replace('.nc', '_subset.nc'))

    with dask.config.set(scheduler='threads', pool=ThreadPool(5)):
        ds = xr.open_dataset(ncfile, decode_times=False)

        ds_sub = ds.where(
            (ds.lon >= min(lon_bnds)) & (ds.lon <= max(lon_bnds)) & (ds.lat >= min(lat_bnds)) & …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing dask python-xarray netcdf4

7
推荐指数
1
解决办法
235
查看次数

使用 cdo 将通用网格类型转换为 lonlat 网格类型

我目前正在尝试使用一个 NetCDF 文件(可以从https://doi.pangaea.de/10.1594/PANGAEA.828650下载的开源数据)从该数据集中提取特定纬度(https://www.nodc .noaa.gov/archive/arc0105/0160558/3.3/data/0-data/spco2_1982-2015_MPI_SOM-FFN_v2016.nc,再次开源)。

第一个数据集是全球海洋中被称为生物群落的定义区域,我已成功从该区域中提取了覆盖标记为 16 和 17 的生物群落的区域。

该数据集具有以下网格类型:

gridtype  = generic
gridsize  = 64800
xsize     = 180
ysize     = 360
xname     = lat
xunits    = "degrees latitude"
yname     = lon
yunits    = "degrees longitude"
xfirst    = -89.5
xinc      = 1
yfirst    = -179.5
yinc      = 1
Run Code Online (Sandbox Code Playgroud)

第二种网格类型是海洋碳通量的全球数据集(参数:fgco2_raw),我希望从 Time_Varying_Biomes.nc 中生物群落 16 和 17 定义的区域中提取值。

此数据集 spco2_1982-2015_MPI_SOM-FFN_v2016.nc 具有以下网格类型:

gridtype  = lonlat
gridsize  = 64800
datatype  = float
xsize     = 360
ysize     = 180
xname     = lon
xlongname …
Run Code Online (Sandbox Code Playgroud)

netcdf4 cdo-climate

7
推荐指数
1
解决办法
8385
查看次数

Python 未找到 netCDF4 导入

我需要使用 netCDF4 模块来进行一些处理。我按照这个台阶上引导和也尝试使用anaconda2这种方法作为recomended职位

netCDF4 似乎已安装,因为我可以运行nc-config --version并获得:

netCDF 4.4.0-rc2
Run Code Online (Sandbox Code Playgroud)

虽然,当我尝试在 python 中导入 netCDF4 时:

from netCDF4 import Dataset
Run Code Online (Sandbox Code Playgroud)

它返回:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    from netCDF4 import Dataset
ImportError: No module named netCDF4
Run Code Online (Sandbox Code Playgroud)

我已经安装了所有依赖项。Cython、numpy 和 h5py。
在我关闭电脑之前,它昨晚还在工作。当我今天早上回来时,它就是行不通。所以如果我安装了 netCDF4 并且可以检查它的版本,python 怎么不把它识别为一个模块?

python netcdf4

6
推荐指数
1
解决办法
2万
查看次数

Python line_profiler 未找到模块

我认识到这是我的安装失败,很抱歉向您提出这个无趣且无关紧要的问题,但我一生都无法弄清楚出了什么问题,我已经没有想法了。我希望有人能够快速指出显而易见的事情。

我正在尝试分析 python 脚本(使用 Kern 的 line_profiler),并且该脚本需要加载 netCDF4 模块。我已经用 pip 安装了 line_profiler 和 netCDF4。当我将 pip 排队以获取已安装软件包的列表时,两者都会报告为存在并更新。

在不使用探查器的情况下,我的脚本运行没有问题,这意味着 netCDF4 模块已正确加载。但是,如果我从“myscript”目录运行“kernprof -l -v myscript.py”,则会收到以下错误:

Traceback (most recent call last):
  File "/usr/local/bin/kernprof", line 9, in <module>
   load_entry_point('line-profiler==1.0', 'console_scripts', 'kernprof')()
  File "Library/Python/2.7/site-packages/kernprof.py", line 221, in main
   execfile(script_file, ns, ns)
  File "myscript.py", line 5, in <module>
   from netCDF4 import Dataset
ImportError: No module named netCDF4 
Run Code Online (Sandbox Code Playgroud)

我正在从 /opt/local/bin/python 安装运行 Python,该安装在我的 PATH 中首先列出。

因此,无论如何,如果我设置的默认 Python 版本与我的 PATH 中首先出现的版本相同,并且该默认版本能够访问 netCDF4 模块,为什么 line_profiler 不能访问呢?

python module installation-package line-profiler netcdf4

5
推荐指数
1
解决办法
4020
查看次数

将netcdf时间变量转换为R日期对象

我有一个带有时间序列的netcdf文件,时间变量具有以下典型元数据:

    double time(time) ;
            time:standard_name = "time" ;
            time:bounds = "time_bnds" ;
            time:units = "days since 1979-1-1 00:00:00" ;
            time:calendar = "standard" ;
            time:axis = "T" ;
Run Code Online (Sandbox Code Playgroud)

RI内部想要将时间转换为R日期对象.我通过读取units属性并拆分字符串并使用第三个条目作为我的原点(因此假设间距为"days",时间为00:00等)以硬连线方式实现此目的:

require("ncdf4")
f1<-nc_open("file.nc")
time<-ncvar_get(f1,"time")
tunits<-ncatt_get(f1,"time",attname="units")
tustr<-strsplit(tunits$value, " ")
dates<-as.Date(time,origin=unlist(tustr)[3])
Run Code Online (Sandbox Code Playgroud)

这个硬连线解决方案适用于我的具体示例,但我希望R中可能有一个包很好地处理时间单位的UNIDATA netcdf数据约定并将它们安全地转换为R日期对象?

r unidata netcdf netcdf4

5
推荐指数
2
解决办法
2475
查看次数

我可以从多个进程/线程写入 HDF5 文件吗?

hdf5 是否支持从不同线程或不同进程并行写入同一文件?或者,hdf5 是否支持非阻塞写入?

如果是这样,那么 NetCDF4 和 python 绑定是否也支持它?

我正在编写一个应用程序,我希望不同的 CPU 内核同时计算用于非常大输出阵列的非重叠图块的输出。(稍后我想从它读取部分作为单个数组,不需要我自己的驱动程序来管理索引许多单独的文件,理想情况下不需要在磁盘上重新排列它的额外 IO 任务。)

python parallel-processing hdf5 bigdata netcdf4

5
推荐指数
1
解决办法
3273
查看次数

Python Xarray ValueError:无法识别的块管理器 dask - 必须是以下之一:[]

我正在使用xarray. 组合多个 netcdf 文件xarray.open_mfdataset。但是我在运行命令时收到错误,下面是命令和错误。

nc_all = xarray.open_mfdataset(files,combine = 'nested', concat_dim="time")
files = glob.glob("/filepath/*")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误 -

Traceback (most recent call last):
  File "/home/lsrathore/GLEAM/GLEAM_HPC.py", line 85, in <module>
    nc_1980_90 = xarray.open_mfdataset(files[1:11],combine = 'nested', concat_dim="time")
  File "/home/lsrathore/.local/lib/python3.9/site-packages/xarray/backends/api.py", line 1038, in open_mfdataset
    datasets = [open_(p, **open_kwargs) for p in paths]
  File "/home/lsrathore/.local/lib/python3.9/site-packages/xarray/backends/api.py", line 1038, in <listcomp>
    datasets = [open_(p, **open_kwargs) for p in paths]
  File "/home/lsrathore/.local/lib/python3.9/site-packages/xarray/backends/api.py", line 572, in open_dataset
    ds = _dataset_from_backend_dataset(
  File "/home/lsrathore/.local/lib/python3.9/site-packages/xarray/backends/api.py", line 367, in _dataset_from_backend_dataset
    ds …
Run Code Online (Sandbox Code Playgroud)

python netcdf python-xarray netcdf4

5
推荐指数
1
解决办法
3256
查看次数