필터 지우기
필터 지우기

Does ncwrite work for multi-dimensional matrix?

조회 수: 2 (최근 30일)
Shenjie Zhou
Shenjie Zhou 2018년 1월 15일
댓글: Shenjie Zhou 2018년 1월 16일
I was trying to write a 3D matrix into the .nc file that I created with nccreate. The information dumped by ncdisp function indicated the file is properly created.
Here is the code I used to create and write the file.
nccreate('ERA5_2015_EVAm.nc','longitude','Dimensions',{'longitude',360},'Datatype','single','Format','64bit');
ncwriteatt('ERA5_2015_EVAm.nc','/','Conventions','CF-1.6');
ncwriteatt('ERA5_2015_EVAm.nc','longitude','units','degrees');
ncwriteatt('ERA5_2015_EVAm.nc','longitude','long_name','longitude');
nccreate('ERA5_2015_EVAm.nc','latitude','Dimensions',{'latitude',180},'Datatype','single');
ncwriteatt('ERA5_2015_EVAm.nc','latitude','units','degrees');
ncwriteatt('ERA5_2015_EVAm.nc','latitude','long_name','latitude');
nccreate('ERA5_2015_EVAm.nc','time','Dimensions',{'time',8760},'Datatype','int32');
ncwriteatt('ERA5_2015_EVAm.nc','time','units','hour since 1900-01-01 00:00:0.0');
ncwriteatt('ERA5_2015_EVAm.nc','time','long_name','time');
ncwriteatt('ERA5_2015_EVAm.nc','time','calendar','gregorian');
nccreate('ERA5_2015_EVAm.nc','e','Dimensions',{'longitude',360,'latitude',180,'time',8760},'Datatype','int16');
ncwriteatt('ERA5_2015_EVAm.nc','e','units','m of water equivalent');
ncwriteatt('ERA5_2015_EVAm.nc','e','long_name','Evaporation');
ncwriteatt('ERA5_2015_EVAm.nc','e','standard_name','lwe_thickness_of_water_evaporation_amount');
time = ncread('ERA5_2015_EVA.nc','time');
longitude = double(ncread('ERA5_2015_EVA.nc','longitude'));
lon(1:180,1) = longitude(181:360)-360;
lon(181:360,1) = longitude(1:180);
lon(361,1) = 180;
lat = double(ncread('ERA5_2015_EVA.nc','latitude'));
e = double(ncread('ERA5_2015_EVA.nc','e'));
eva(1:180,:,:) = e(181:360,:,:);eva(181:360,:,:) = e(1:180,:,:);eva(361,:,:) = e(181,:,:);
clear e;
[x0,y0] = meshgrid(lon,lat);
[x,y] = meshgrid(-179.5:179.5,-89.5:89.5);
for i = 1:8760
e(1:360,1:180,i) = interp2(x0,y0,eva(:,:,i)',x,y,'nearest')';
end
clear eva;
ncwrite('ERA5_2015_EVAm.nc','longitude',-179.5:179.5);
ncwrite('ERA5_2015_EVAm.nc','latitude',-89.5:89.5);
for Ilon = 1:360
for Ilat = 1:180
ncwrite('ERA5_2015_EVAm.nc','e',e(Ilon,Ilat,:),[Ilon Ilat 1]);
end
end
ncwrite('ERA5_2015_EVAm.nc','time',time);
The longitude, latitude and time has been properly input into the file while the 'e' is not. The 'e' I read from the .nc file after writing is zero at all grids as indicated below,
e = double(ncread('ERA5_2015_EVAm.nc','e'));
figure;pcolor(e(:,:,1));shading interp;
while the actual distribution of 'e' should be like this,
figure;pcolor(e(:,:,1));shading interp;
I am sure I did something stupidly wrong, hoping for suggestion from the community!
Many thanks!
Shenjie
  댓글 수: 2
Shenjie Zhou
Shenjie Zhou 2018년 1월 16일
Hi Jan, sorry about the annoying format, I've made some modification of the code, hope it should be easy to read now. Cheers

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Read, Write, and Modify Image에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by