python-xarray 相关问题

xarray(以前称为xray)是一个开源库,提供一系列N维数据结构。

使用 xarray where() 从 netCDF 文件创建掩码

我正在尝试编写一个函数,该函数接受一个 netCDF 文件(其中包含 NaN 或特定值)并屏蔽另一个 netCDF 文件(该文件大部分已满,但在没有数据的情况下有一些 NaN)。是

回答 1 投票 0

Python xarray:按多个参数分组

当使用 Python 2.7 的 xarray 包时,是否可以像 pandas 那样对多个参数进行分组?本质上,像这样的操作: data.groupby(['时间.年','时间.月']).mean(...

回答 4 投票 0

在内存量相对较低(32GB)的超大数据上进行深度学习的补丁创建方法

我正在尝试训练卫星图像的深度学习语义分割模型。在此过程中,我使用 patchify 和 rasterio 在小型 AOI 上创建了数据测试运行,没有出现任何问题。

回答 1 投票 0

cfgrib 无法识别数据变量

数据来源:http://edc.occ-data.org/nexrad/mosaic/#data-updates 使用“MRMS_PrecipRate_00.00_20010101-120000.grib2”,这是 2001 年数据集中的第一个文件 问题:“PrecipRate”属性...

回答 2 投票 0

查找 3D 数组中沿一个轴的相同值序列的长度(与游程长度编码相关)

我有兴趣在多维数组中查找沿单轴的 1 序列的长度。 对于一维数组,我已经使用这个旧问题的答案找到了解决方案。 ...

回答 1 投票 0

Pandas:使用 Xarray 限制 __repr__ 和 _repr_html_ 行为

我在数据框中存储大型 xarray,但每次在 Jupyter 或终端中显示数据框时,它都会花费很长时间(10 行数据框需要 11 秒)。我想它有一些东西......

回答 1 投票 0

向 Array Dataarray 中的一个现有坐标添加一些值

假设我们打开一个 NetCDF 文件并获得一个 DataArray da,如下所示 数组([[0.50793919,0.49505336,0.19573345], [0.7830897、0.82954952、0.19427877]]) 坐标...

回答 1 投票 0

根据特定月份选择xarray/pandas索引

我有一个 xarray DataArray,我想为整个时间序列选择四月、五月、六月(类似于 time.season=='JJA')。 其结构如下: 我有一个 xarray DataArray,我想为整个时间序列选择四月、五月、六月(类似于 time.season=='JJA')。 其结构如下: <xarray.DataArray 't2m' (time: 492, latitude: 81, longitude: 141)> 我之前选择JJA的方式是: seasonal_data =temp_data.sel(time=temp_data['time.season']=='JJA') 我想做同样的事情,但用月份“AMJ”代替。我可以添加我可能遗漏的任何细节。 谢谢 选择自定义月份的最简单方法是使用布尔掩码,例如, def is_amj(month): return (month >= 4) & (month <= 6) seasonal_data = temp_data.sel(time=is_amj(temp_data['time.month'])) 请注意,您需要使用像 & 或 | 这样的按位运算符,因为 Python 的内置函数 and 和 or 不适用于向量。另外,您需要括号,因为按位运算符的优先级高于比较。 另一种方法是使用 isin 函数: data = temp_data.sel(time=temp_data.time.dt.month.isin([4,5,6]))

回答 2 投票 0

如何使用 xarray 数据集中额外分配的坐标作为 hvplot 中的悬停工具提示?

在使用 hvplot.image() 时尝试在工具提示中包含自定义坐标( xind 和 yind )时遇到问题。 这是我的代码的最小可重现示例: 导入 hvplot.xarray

回答 1 投票 0

从Xarray中匿名选择数据

在 pandas 中我可以做类似的事情 - pd.read_csv(path).loc[lambda df: df.col > 10, 列] 我想知道 Xarray 中是否有等效的东西?我试过了 - xr.open_dataset(path)["var"]...

回答 1 投票 0

Pandas 数据框:跨年份分组

在 Pandas 中,当时间戳的其余部分相同时,是否有一个 groupby 操作来对多年的值进行分组? 例如 12:00:00 01/01/2000、12:00:00 01/01/2001 和 12:00:00 01/01/2...

回答 4 投票 0

如何在Python中显示一个变量的所有数据?

我有一个名为“sum”的变量,其中包含以下信息: sum (时间、纬度、经度)float32 dask.array 如何显示该变量的所有数据...

回答 1 投票 0

将xarray中的变量从一个crs旋转到另一个crs

我有两个 xarray 数据集,每个数据集都有自己的旋转极点 crs。我需要从一个数据集中插入一个变量并将其添加到另一个数据集中。 每个数据集都有 rlat/rlon 的暗淡/坐标,以及...

回答 1 投票 0

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

我正在使用 xarray 使用 xarray.open_mfdataset 连接多个 netcdf 文件。但是,当我尝试运行我的代码时,出现以下错误: -----------------------------------------------------------...

回答 1 投票 0

XArray 将函数应用于坐标

如何通过对 XArray 数据集的坐标值应用函数来创建数据数组? 前任。 ds = xr. 数据集( 坐标={ “x”:[1.5,4,2], 'y': [2, -3, -1], ...

回答 1 投票 0

将 Xarray 数据集重新采样到更高的空间分辨率?

这感觉应该是一个已知解决方案的简单问题,但很难弄清楚。 我在常规网格上有一个 2D xarray 数据集(带有纬度/经度)。我想增加

回答 1 投票 0

为什么访问 xarray 中的值这么慢?

我需要访问一堆历史天气数据并使用ERA5数据集(> 1 Mio。特定位置点在特定时间戳)。 我通过下载的 GRIB 文件和 xarray 访问它...

回答 2 投票 0

如何提高大型 .nc 文件(70GB-350GB)的文件读取时间?

我正在使用 ERA5 大气数据以最大空间和时间分辨率计算全球任何地方的风速。这会产生一个包含一年数据的未压缩 70GB 文件,...

回答 1 投票 0

寻求在 3D 网格数据集上处理 1d 线性插值

这是先前问题的后续问题:Implementing 1D interpolation on a 3D Array in Numpy or Xarray Tsoil 是一个 3D xarray 数据集,具有以下维度: 这是先前问题的后续问题:Implementing 1D interpolation on a 3D Array in Numpy or Xarray Tsoil 是一个 3D xarray 数据集,具有以下维度: <xarray.DataArray 'Tsoil' (lat: 1200, lon: 7200, depth: 4)> dask.array<xarray-<this-array>, shape=(1200, 7200, 4), dtype=float32, chunksize=(1200, 7200, 4), chunktype=numpy.ndarray> Coordinates: * lat (lat) float64 30.03 30.08 30.13 30.18 ... 89.83 89.88 89.93 89.98 * lon (lon) float64 -180.0 -179.9 -179.9 -179.8 ... 179.9 179.9 180.0 * depth (depth) float64 3.5 17.5 64.0 194.5 这对应于沿纬度/经度网格不同深度的土壤温度,因此最里面的维度恰好是 T 土壤。我想对 Tsoil 进行插值,这样我就可以在 0 厘米到 289 厘米之间每 0.5 厘米获得更精细的土壤温度分辨率,而不是 4 个深度的温度测量。这需要我对 XArray 的最内层维度执行一维插值。 我定义了一个函数,其输入是来自 xarray 数据集的块: import numpy as np import pandas as pd import xarray as xr import scipy import dask.array as da def interp1d_chunk(chunk, new_depths=new_depths, depths=depths): print(chunk) nlat, nlon, _ = chunk.shape new_chunk = np.empty((nlat, nlon, len(new_depths))) for i in range(nlat): for j in range(nlon): f = scipy.interpolate.interp1d(depths,chunk[i, j, :],bounds_error=False,fill_value="extrapolate") new_chunk[i, j, :] = f(new_depths) print(new_chunk) return new_chunk 假设 Tsoil(出于此处的目的)是一个大小为 (4,4,4) 的 3d 数组: test_array = np.asarray([[[ 9.984375 , 9.315826 , 6.753296 , -0.71829224], [ 9.812378 , 9.15155 , 6.6003723 , -0.7545166 ], [ 9.925293 , 9.266205 , 6.729767 , -0.67056274], [ 9.925293 , 9.266205 , 6.729767 , -0.67056274]], [[10.201508 , 9.524597 , 6.9415283 , -0.6557312 ], [ 9.812378 , 9.15155 , 6.6003723 , -0.7545166 ], [10.083374 , 9.394531 , 6.7566833 , -0.7775879 ], [ 9.925293 , 9.266205 , 6.729767 , -0.67056274]], [[10.201508 , 9.524597 , 6.9415283 , -0.6557312 ], [ 9.812378 , 9.15155 , 6.6003723 , -0.7545166 ], [10.083374 , 9.394531 , 6.7566833 , -0.7775879 ], [ 9.925293 , 9.266205 , 6.729767 , -0.67056274]], [[10.201508 , 9.524597 , 6.9415283 , -0.6557312 ], [10.109436 , 9.4236145 , 6.80542 , -0.7413635 ], [10.083374 , 9.394531 , 6.7566833 , -0.7775879 ], [10.083374 , 9.394531 , 6.7566833 , -0.7775879 ]]],dtype=np.float32) test_lats = [60.275, 60.325, 60.375, 60.425] test_lons = [140.75, 140.8, 140.85, 140.9] depths=np.asarray([3.5,17.5,64,194.5]) new_depths = np.arange(0,289.1,0.5) 我将创建一个名为 test_stemp 的虚拟 XArray: test_stemp = xr.DataArray(test_array,'lat':test_lats,'lon':test_lons,'depth' coords={'lat':lats,'lon':lons,'depth':depths}, dims=['lat','lon','depth']).rename('Tsoil').chunk(chunks={lat_var:len(test_lats),lon_var:len(test_lons),'depth':4}) 然后我尝试通过 interp1d_chunk 运行它,并沿 new_depths 进行插值,但似乎该函数传递的块大小为零: stemp_interp = da.map_blocks(interp1d_chunk, chunk=test_stemp, new_depths=new_depths, depths=depths, dtype='float',chunks=(len(test_lats),len(test_lons),len(new_depths))) <xarray.DataArray (lat: 0, lon: 0, depth: 0)> array([], shape=(0, 0, 0), dtype=float32) Coordinates: * lat (lat) float64 * lon (lon) float64 * depth (depth) float64 有人对我的函数或程序可能有什么问题有什么建议吗? 这是预期的行为。 请注意,map_blocks 将尝试通过在输入的 0 维版本上调用 func 来自动确定输出数组类型。如果您预计该函数在 0 维数组上操作时不会成功,请参阅下面的 meta 关键字参数。 https://docs.dask.org/en/stable/ generated/dask.array.map_blocks.html 由于 meta 未定义,它会使用 (0, 0, 0) 数组调用您的函数。您可以定义元,或者您可以在这种情况下更改返回值,以便即使前两个轴的长度为零,它也返回一个数组。 def interp1d_chunk(chunk, new_depths, depths): print(chunk) nlat, nlon, _ = chunk.shape new_chunk = np.zeros((nlat, nlon, len(new_depths))) for i in range(nlat): for j in range(nlon): f = scipy.interpolate.interp1d(depths,chunk[i, j, :],bounds_error=False,fill_value="extrapolate") new_chunk[i, j, :] = f(new_depths) print(new_chunk) return new_chunk 请注意,我未缩进 return new_chunk 两个缩进。我认为为了正确性,这也是一个很好的改变 - 在仅插入一组深度值后返回 new_chunk 是没有意义的。 我还将np.empty()更改为np.zeros()。虽然 np.empty() 可以更快,但它 也会导致您使用未初始化的内存。通常不值得为获得不确定的结果而烦恼。 最后,请注意此计算是惰性计算。在您调用 stemp_interp.compute() 之前,它实际上不会进行插值。

回答 1 投票 0

在 xarray 数据集的子集中设置新值

我有一个xarray数据集,涵盖经度从9到30和54到66。如何将该数据集中的所有变量从特定坐标范围设置为-1? 一旦我执行 df.isel 或 df.iloc 或 df.sel...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.