我想了解导致我在以下情况下收到警告消息的原因:
在之前的操作中,我创建了一些 NetCDF 文件并使用xarray.to_netcdf().
在 jupyter 笔记本中对这些数据集进行惰性评估完全没问题,并且在以下情况下我不会收到警告/错误:
.nc通过打开这些文件ds = xarray.open_mfdataset('/path/to/files/*.nc')ds.time.valuesds.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) 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) 我正在尝试重新整理 NetCDF 文件集合并在 AWS S3 上创建 Zarr 数据集。我有 168 个原始 NetCDF4 经典文件,其维度数组time: 1, y: 3840, x: 4608分块为chunks={'time':1, 'y':768, 'x':922}.
我想将此输出写入 Zarr,并且我想针对时间序列提取进行优化,因此在我的块中包含更多时间记录。我想我会使用 xarray 来帮助完成工作,因为我有很多处理器可以利用 Dask,而 xarrayxr.open_mfdataset和ds.to_zarr.
我第一次尝试rechunking来chunks={'time':24, 'y':768, 'x':922}匹配输入NetCDF4在分块x和y,但是当我试图写Zarr它抱怨,因为它需要在两个均匀的块大小x和y,只允许非均匀大小沿的最后一块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) 我对 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) 我目前正在尝试使用一个 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 模块来进行一些处理。我按照这个台阶上引导和也尝试使用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 脚本(使用 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 不能访问呢?
我有一个带有时间序列的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日期对象?
hdf5 是否支持从不同线程或不同进程并行写入同一文件?或者,hdf5 是否支持非阻塞写入?
如果是这样,那么 NetCDF4 和 python 绑定是否也支持它?
我正在编写一个应用程序,我希望不同的 CPU 内核同时计算用于非常大输出阵列的非重叠图块的输出。(稍后我想从它读取部分作为单个数组,不需要我自己的驱动程序来管理索引许多单独的文件,理想情况下不需要在磁盘上重新排列它的额外 IO 任务。)
我正在使用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)