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

时间:2019-06-04 22:22:34

标签: python-3.x multidimensional-array netcdf python-xarray

我目前正在处理一些天气数据,这些数据作为netcdf文件,可以使用pythons xarray库轻松读取
我现在想获取具有3个维度(经度,纬度和时间)的DataArray的n个最小值
当我有一个DataArray dr时,我可以做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 个答案:

答案 0 :(得分: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)

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