获取多维的 n 个最小值 xarray.DataArray
get n smallest values of multidimensional xarray.DataArray
我目前正在处理我拥有的一些天气数据作为 netcdf 文件,我可以使用 pythons xarray 库轻松读取这些数据
我现在想获得我的 DataArray 的 n 个最小值,它具有 3 个维度(经度、纬度和时间)
当我有一个 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 沿经度和纬度轴减小到各自的最小值?
我刚刚发现确实有一个 reduce function for DataArray that allows me to reduce along longitude and latitude and as I don't reduce the time dimension, I can just use the sortby 函数并获取具有每天各自时间的最小值的 DataArray:
with xr.open_dataset(path) as ds:
dr = ds[selection]
dr = dr.reduce(np.min,dim=[longitude,latitude])
dr.sortby(dr)
明显不比我原来的代码短,但是完全满足我的要求
我目前正在处理我拥有的一些天气数据作为 netcdf 文件,我可以使用 pythons xarray 库轻松读取这些数据
我现在想获得我的 DataArray 的 n 个最小值,它具有 3 个维度(经度、纬度和时间)
当我有一个 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 沿经度和纬度轴减小到各自的最小值?
我刚刚发现确实有一个 reduce function for DataArray that allows me to reduce along longitude and latitude and as I don't reduce the time dimension, I can just use the sortby 函数并获取具有每天各自时间的最小值的 DataArray:
with xr.open_dataset(path) as ds:
dr = ds[selection]
dr = dr.reduce(np.min,dim=[longitude,latitude])
dr.sortby(dr)
明显不比我原来的代码短,但是完全满足我的要求