获取多维 xarray.DataArray 的 n 个最小值

Posted

技术标签:

【中文标题】获取多维 xarray.DataArray 的 n 个最小值【英文标题】:get n smallest values of multidimensional xarray.DataArray 【发布时间】:2019-10-20 11:12:14 【问题描述】:

我目前正在处理一些天气数据,这些数据是 netcdf 文件,我可以使用 pythons xarray 库轻松读取这些数据 我现在想获得具有 3 个维度(经度、纬度和时间)的 DataArray 的 n 个最小值 当我有一个 DataArray 博士时,我可以做dr.min(),也许指定一个轴然后我得到最小值,但是当我还想得到第二小的甚至可变数量的最小值时,它似乎不是一样简单 我目前做的是:

with xr.open_dataset(path) as ds:
    dr = ds[selection]
    dr = dr.values.reshape(dr.values.size)
    dr.sort()
    n_smallest = dr[0:n]

与简单的 .min() 相比,这对我来说似乎有点复杂,我必须输入最小值 我实际上想将时间设置为我为最小值所做的相应最小值:

dr.where(dr[selection] == dr[selection].min(), drop=True)[time].values

那么有没有更好的方法来获得 n 个最小值?或者甚至是获取 n 个最小值的时间的简单方法? 也许有一种方法可以将沿经度和纬度轴的 3D DataArray 减少到各自的最小值?

【问题讨论】:

【参考方案1】:

我刚刚发现 DataArray 确实有一个 reduce 函数,它允许我沿经度和纬度减少,并且由于我不减少时间维度,我可以使用 sortby 函数并获取 DataArray每天的最小值及其各自的时间:

with xr.open_dataset(path) as ds:
    dr = ds[selection]
    dr = dr.reduce(np.min,dim=[longitude,latitude])
    dr.sortby(dr)

这显然不比我的原始代码短,但完全满足我的要求

【讨论】:

很好的例子 - 你可能会发现计算第 X 个百分位数很有用,因此你可以轻松识别较低的 X% 值,这个链接可能很有趣***.com/questions/2374640/…

以上是关于获取多维 xarray.DataArray 的 n 个最小值的主要内容,如果未能解决你的问题,请参考以下文章

如何将 xarray DataArray 与长度为 1 的维度与更大的数组对齐?

xarray - 返回满足特定条件的数据,而不必使用for循环

使用没有日期的时间作为 xarray 中的一维

总结 xarray 数据数组的列表

将DataArray转换为numpy数组

PHP获取两个多维数组的差集