Потеря точности в данных NetCDF при импорте в python из-за масштабного коэффициента и смещения - PullRequest
2 голосов
/ 15 января 2020

У меня есть файл NetCDF, который был сгенерирован в результате численного моделирования. Данные хранятся с использованием масштабного коэффициента и смещения, пример из ncdump следующий:

    float lon(lon) ;
        lon:long_name = "longitude" ;
        lon:standard_name = "coordinates_i" ;
        lon:units = "degrees_east " ;
        lon:scale_factor = 9.308405e-06f ;
        lon:add_offset = 118.9597f ;

Эти данные должны плавно меняться от одного значения к другому.

Если я импортирую это используя netcdf4 или xarray e'g 'data = xr.open_dataset('path/to/file'), тогда, когда я смотрю на координаты, данные были потеряны, и они больше не меняются плавно. вместо этого выглядит как enter image description here

Если я импортирую, используя data = xr.open_dataset('path/to/file', mask_and_scale=False), тогда данные будут гладкими enter image description here

, но это не очень полезно, так как не содержит нужной мне информации (немасштабировано). Мне кажется, что есть проблема точности, из-за которой «гладкость» данных находится на слишком высоком десятичном знаке и была потеряна.

Так что мой вопрос, есть ли способ повысить точность при импорте чтобы данные оставались гладкими и не становились ступенчатыми при использовании коэффициента масштабирования и смещения? возможно, используя модуль decimal или что-то еще?

В качестве альтернативы, есть ли способ импортировать сохраненные данные, масштабный коэффициент и смещение отдельно. и затем применить их в моем python сценарии, где я могу обеспечить более высокую точность?

Я пробовал несколько различных подходов, и пока ничего не работает. Заранее спасибо за помощь.

1 Ответ

2 голосов
/ 17 января 2020

Это некорректная переменная. scale_factor и add_offset должны аннотировать только упакованные данные (например, short), но эта переменная имеет тот же тип цифр c, что и атрибуты упаковки.

Расширенный ответ в ответ на вопросы ниже: ИМХО координаты (широта, долгота) должны редко упаковываться. Тем не менее, чтобы правильно упаковать координаты в этом примере, можно масштабировать и смещать координаты с указанными факторами, а затем деминировать и сохранять массив в любом типе данных, который требует меньше памяти (например, 2-байтовые шорты), чем собственный 4. -байтные данные с плавающей точкой, тогда ncdump будет показывать short lon(lon), а все остальное будет таким же. xarray, похоже, смущен искаженными данными и количественно их вводит при вводе.

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