问题标签 [python-xarray]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2440 浏览

python - 将 numpy.polyfit 应用于 xarray 数据集

Xarray 是否支持诸如 polyfit 之类的 numpy 计算函数?或者有没有一种有效的方法将这些函数应用于数据集?

示例:我想计算适合两个变量(温度和高度)的线的斜率,以计算失效率。我有一个包含这两个变量的数据集(如下),维度为(垂直、时间、xgrid_0、ygrid_0)。

如果我提取给定时间的温度和高度,xgrid_0,ygrid_0; 我可以使用 numpy.polyfit 函数。

但这是一种缓慢且低效的方法。关于解决此问题的更好方法的任何建议?

0 投票
1 回答
335 浏览

python-xarray - groupby.apply 方法采用多个参数

xarray文档中,该groupby.apply方法可以将某些功能应用于不同的组。如文档中所述,

但是,如何将另一个参数放入标准化函数中?IE

显然不对。现在,没有办法调用 apply 方法。

0 投票
1 回答
1649 浏览

python - python xarray索引/切片非常慢

我目前正在处理一些海洋模型输出。在每个时间步,它有 42*1800*3600 个网格点。

我发现我的程序中的瓶颈是切片,并调用 xarray_built in 方法来提取值。更有趣的是,相同的语法有时需要完全不同的时间。

以这个为例,读取 VVEL 和 UVEL 大约需要 4 秒,而读取 TEMP 只需要大约 6 毫秒。如果没有切片,VVEL 和 UVEL 需要大约 1 秒,而 TEMP 需要 120 纳秒。

我一直认为,当我只输入完整数组的一部分时,我需要更少的内存,因此需要更少的时间。事实证明,XARRAY 加载到整个数组中,任何额外的切片都需要更多时间。但是,有人可以解释为什么从同一个 netcdf 文件中读取不同的变量需要不同的时间吗?

该程序旨在提取逐步截面,并计算截面热传输,因此我需要选择 UVEL 或 VVEL,乘以沿截面的 TEMP。所以,看起来,在 TEMP 中快速加载是件好事,不是吗?

不幸的是,事实并非如此。当我沿着规定的部分循环大约 250 个网格点时......

特别是这一行:

它需要约 3.65 秒,但现在必须重复约 250 次。如果我删除.values,那么这个时间减少到〜4ms。但我需要计时ttto vt,所以我必须提取值。奇怪的是,类似的表达式vv=np.squeeze(vvel[:,yidx,xidx].values)需要的时间要少得多,大约只有 1.3 毫秒。


总结我的问题:

  1. 为什么从同一个 netcdf 文件加载不同的变量需要不同的时间?
  2. 有没有更有效的方法来挑选多维数组中的单列?(不需要 xarray 结构,也不需要 numpy.ndarray)
  3. 为什么从 Xarray 结构中提取值需要不同的时间,对于完全相同的语法?

谢谢!

0 投票
1 回答
1150 浏览

python - xarray.Dataset.where() 方法将 DataArrays 的 dtype 强制更改为浮动

问题描述

我有一个包含ints 的数据集,我想根据一些标准选择一个子数据集,但我想保留整数数据类型。在我看来,Xarray 强制将整数数据更改为浮点数据类型。

示例设置

代码

输出

示例问题

代码

输出

0 投票
1 回答
1632 浏览

python - 仅使用冬季数据将 xarray 数据集重新采样为年频率

我有一个数据集,其中包含几年的每日 x,y 网格气象数据。我只对计算冬季数据的年度平均值感兴趣,即。也不包括夏季数据。

我认为我需要使用该resample命令,例如,AS-OCT将时间序列重新采样为年度频率,冬季从每年 10 月开始(它是北纬地区)。

我无法解决的是如何指定我只想使用从 10 月到 4 月/5 月的数据,而忽略 6 月、7 月和 8 月。

由于 resample 函数适用于ndarray对象,我想出了一个相当不便携的方法来做这个总和:

但我觉得应该有一个更优雅的解决方案。有任何想法吗?

0 投票
1 回答
1565 浏览

python - 在 python xarray netcdf4 中创建输出变量和复制属性

我可以像这样在 netcdf4 中创建变量并复制属性:

xarray 对应的版本是什么?

0 投票
2 回答
3541 浏览

python - 使用 xarray open_mfdataset 函数时出错

我正在尝试组合多个具有相同尺寸的 netCDF 文件,它们的尺寸如下:

但是,在使用 open_mfdataset 时,我收到此错误:

如何修复此错误?我的尺寸在所有文件中都相同

0 投票
5 回答
8316 浏览

python - 向 xarray DataArray 添加维度

我需要向 a 添加一个维度DataArray,填充新维度中的值。这是原始数组。

我想我可以用新维度创建一个空的 DataArray 并复制现有数据。

一个更好的主意可能是使用concat. 我花了一段时间才弄清楚如何为 concat 维度指定暗淡和坐标,但这些选项似乎都不是很好。有什么我遗漏的东西可以使这个版本更干净吗?

不过,还有比上述两个选项更好的方法吗?

0 投票
1 回答
4299 浏览

python - xarray 中的布尔索引

我有一些带有暗淡的数组,'time', 'lat', 'lon'有些只有'lat', 'lon'. 我经常必须这样做才能使用 2d(经纬度)掩码来掩码与时间相关的数据:

当然,计算按预期广播。如果y是 2d lat-lon 数据,则其值将广播到 x 中的所有时间坐标:

但是索引并没有像我期望的那样广播。我希望能够做到这一点,但它会引发ValueError: Buffer has wrong number of dimensions

最后,似乎xr.where 确实可以按预期跨时间坐标广播掩码的值,但是您不能以这种方式设置值。

那么,我在这里是否缺少一些有助于使用缺少尺寸(并且需要广播)的布尔掩码设置值的东西?我在顶部提供的选项真的是做到这一点的方法吗(在这种情况下,我不妨只使用标准的 numpy 数组......)

0 投票
1 回答
143 浏览

python - xarray 广播如何与 numpy 函数一起使用?

我正在尝试使用我的 xarray 坐标进行坐标转换,所以

我有一个像这样的 DataArray:

并且正在执行以下操作:

我得到以下形状:

我想看看(10, 10, 1)我为所有人得到的 r 形状。

看起来 xarray 的花哨广播只适用于基本的算术运算,而 numpy 函数正在天真地广播。

它是否正确?

有没有经过批准的方法来解决这个问题?我可以编写我自己的 xarray 感知 arctan2 函数来获得正确的广播,但我希望我不必这样做。