Я работаю в MATLAB с довольно большим файлом netcdf, содержащим следующую переменную:
tg
Size: 272x214x23011
Dimensions: longitude,latitude,time
Datatype: int16
Attributes:
long_name = 'mean temperature'
units = 'Celsius'
standard_name = 'air_temperature'
_FillValue = -1e+004
scale_factor = 0.01
Я использую функцию ncread для чтения фрагментов матрицы, например:
data = ncread(netcdfFile,'tg',[1 1 1],[Inf Inf 10]);
Для первых 10 временных шагов. Если памяти достаточно, а «кусок» достаточно мал, MATLAB будет записывать «данные» с двойной точностью, иначе они будут записаны в int16. Если «данные» имеют двойную точность, значения, равные значению «_FillValue», будут преобразованы в NaN, а если «данные» находятся в int16, те же ячейки теперь будут содержать значение -9999. Почему это? -1e + 004 находится в диапазоне int16, так почему MATLAB записывает его как -9999, а не -10000?
Это потому, что int16 (NaN) = 0, который затем попадает в диапазон данных, после чего MATLAB применяет значение заполнения по умолчанию -9999 к ячейкам?
Может кто-нибудь объяснить, что происходит?
1 ответ
Я считаю, что значение заполнения на самом деле -9999. Это досадная проблема с отображением.
>> nccreate('/tmp/t.nc','p','FillValue',-9999)
>> ncdisp /tmp/t.nc
Source:
/tmp/t.nc
Format:
netcdf4_classic
Variables:
p
Size: 1x1
Dimensions:
Datatype: double
Attributes:
_FillValue = -1e+04
Похожие вопросы
Новые вопросы
matlab
MATLAB - это высокоуровневая языковая и интерактивная среда программирования для численных расчетов и визуализации, разработанная MathWorks. Не используйте оба тега [matlab] и [octave], если явно не задан вопрос о сходстве или различии между ними. При использовании этого тега, пожалуйста, укажите версию MATLAB, с которой вы работаете (например, R2017a).