Координаты измерений имеют значения заполнения и, следовательно, значения повторяются - PullRequest
0 голосов
/ 11 февраля 2019

Я получил несколько файлов данных (NetCDF) от коллеги, и я пытаюсь объединить эти файлы в один файл, чтобы я мог запустить его с некоторыми из моих предыдущих сценариев.Проблема в том, что полученные мной файлы NetCDF имеют размерность "высота" со значениями заполнения 1e20.Это вызывает ошибку, когда я пытаюсь выполнить практически любые операции xarray с файлами, поскольку в координатах измерения есть повторяющиеся значения.

Вот информация об одном из файлов (вы можете увидеть повторяющиеся значения в конечных значениях координат «высоты»):

<xarray.Dataset> Dimensions:  (height: 1061) 
Coordinates:   * height   (height) float64 0.0 10.0 20.0 30.0 ... 1e+20 1e+20 1e+20 1e+20 
Data variables:
            pres     (height) float32 ...
            tdry     (height) float32 ...
            rh       (height) float32 ...
            u_wind   (height) float32 ...
            v_wind   (height) float32 ...
            mr       (height) float32 ...
            theta    (height) float32 ...
            theta_e  (height) float32 ...
            theta_v  (height) float32 ...
            lat      (height) float32 ...
            lon      (height) float32 ...
            alt      (height) float32 ...
            wdir     (height) float32 ...

Я думал, что может быть переиндексация кНовый индекс без значений заполнения может помочь, но я также не могу этого сделать, так как снова появляется сообщение об ошибке:

ValueError: cannot reindex or align along dimension 'height' because the index has duplicate values

Если бы кто-то мог помочь мне здесь, это было бы большой пользой!Некоторое время я боролся с этим, но, возможно, решение довольно простое, и статус моего новичка здесь не особо помогает.: /

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Как насчет удаления повторяющихся записей, как предложено в этом сообщении ?

.isel метод должен работать, даже если координаты имеют дублированные записи.Приведенный ниже скрипт может работать

_, index = np.unique(ds['time'], return_index=True)
ds.isel(time=index)
0 голосов
/ 11 февраля 2019

Это не решение Python, но мне было интересно, не помогут ли CDO или NCO решить эту проблему проще / быстрее?

Если файлы для разных времен, вы можете попробовать

cdo mergetime input_t*.nc output.nc 

(* подстановочный знак для имен)

В более общем случае вы можете попытаться отследить файлы с помощью:

cdo cat input_t*.nc output.nc 

Хотя я не уверен, как cdo будет справляться с отсутствующими координатами высоты

Вы также можете добавлять файлы в nco с помощью

ncks -A appended_file.nc target_file.nc 

Не уверен, какое (если есть) из этих решений будет работать, но я надеюсь, что кто-то может помочь.

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