получить n наименьших значений многомерного xarray.DataArray - PullRequest
2 голосов
/ 05 июня 2019

В настоящее время я работаю с некоторыми данными о погоде, которые у меня есть в виде файлов netcdf, которые я могу легко прочитать с помощью библиотеки pythons xarray
Теперь я хотел бы получить 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-данных вдоль оси долготы и широты до соответствующих наименьших значений?

1 Ответ

1 голос
/ 05 июня 2019

Я только что понял, что на самом деле есть функция уменьшение для DataArray, которая позволяет мне уменьшать по долготе и широте, и, поскольку я не уменьшаю измерение времени, я могу просто использовать сортировку функция и получить DataArray с минимальными значениями для каждого дня с их соответствующим временем:

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

, которое, очевидно, не короче моего исходного кода, но полностью удовлетворяет моим требованиям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...