How can I convert NaN values to single -999 value
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Szabó-Takács Beáta
am 20 Jun. 2017
Kommentiert: Szabó-Takács Beáta
am 20 Jun. 2017
Dear Matlab Users,
I use R2015b Matlab. I tried to convert NaN data to -999 and convert the matrix which containes these -999 values to single by:
[ndata,Nest]=size(prC);
data=repmat(NaN,[ndata,nlon,nlat]);
for i=1:nlat
for j=1:nlon
[a1,a2]=min(sqrt((longitude2(i,j)-Struct1.Info.Location(:,1)).^2+(latitude2(i,j)-Struct1.Info.Location(:,2)).^2));
if a1<0.25
data(:,j,i)=prC(:,a2);
end
end
end
data(isnan(data))=single(-999);
pr = permute(data,[2,3,1]);
pr = single(pr);
but when I created netCDF file from these values by:
ncid1=netcdf.create('CM5A-MR_RCA4_dry_power1.nc','NC_NOCLOBBER');
>> londimid=netcdf.defDim(ncid1,'longitude',464);
>> latdimid=netcdf.defDim(ncid1,'latitude',201);
>> timedimid=netcdf.defDim(ncid1,'time',5479);
>> lon_varid=netcdf.defVar(ncid1,'longitude','float',londimid);
>> lat_varid=netcdf.defVar(ncid1,'latitude','float',latdimid);
>> time_varid=netcdf.defVar(ncid1,'time','double',timedimid);
>> pr_varid=netcdf.defVar(ncid1,'pr','float',[londimid latdimid timedimid]);
>> netcdf.endDef(ncid1);
>> netcdf.putVar(ncid1,lon_varid,lon);
>> netcdf.putVar(ncid1,lat_varid,lat);
>> netcdf.putVar(ncid1,time_varid,time);
>> netcdf.putVar(ncid1,pr_varid,pr);
>> netcdf.reDef(ncid1);
>> netcdf.putAtt(ncid1,0,'long_name','longitude');
>> netcdf.putAtt(ncid1,0,'standard_name','lon');
>> netcdf.putAtt(ncid1,0,'units','degrees_east');
>> netcdf.putAtt(ncid1,1,'long_name','latitude');
>> netcdf.putAtt(ncid1,1,'standard_name','lat');
>> netcdf.putAtt(ncid1,1,'units','degrees_north');
>> netcdf.putAtt(ncid1,2,'long_name','time');
>> netcdf.putAtt(ncid1,2,'standard_name','time');
>> netcdf.putAtt(ncid1,2,'units','days since 1949-12-1 00:00:00');
>> netcdf.putAtt(ncid1,3,'_FillValue',-999);
>> netcdf.putAtt(ncid1,3,'long_name','precipitation');
>> netcdf.putAtt(ncid1,3,'standard_name','precipitation');
>> netcdf.putAtt(ncid1,3,'units','mm');
>> netcdf.putAtt(ncid1,3,'cell_methods','time: mean');
netcdf.close(ncid1);
the _FillValue became double even though the pr is single (float). According to my best knowledge the missing values or _FillValues type has to be same as the variables (pr). How can I convert the NaN values to single _FillValue? Thank you for your help in advance! Beata
0 Kommentare
Akzeptierte Antwort
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu NetCDF finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!