How to write a large matrix to a nc-file

8 views (last 30 days)
Petar Milin
Petar Milin on 10 Mar 2020
Edited: Petar Milin on 15 Mar 2020
I am trying to write a large matrix to a file using nccreate() and ncwrite(), but MATLAB is unfortunately crushing. Can you please provide a code example of how to write a matrix of, say 40K x 40x, in double precision?

Answers (2)

Jemima Pulipati
Jemima Pulipati on 13 Mar 2020
Here is a sample code which writes a 400 x 800 matrix to an NC file and retrieves the matrix from the file
and checks whether the data written matches or not using netcdf
numrow = 400;
numcol = 800;
my_data = rand(numrow,numcol);
ncid = netcdf.create('somefile.nc','NC_WRITE');
dimidrow = netcdf.defDim(ncid,'rows',numrow);
dimidcol = netcdf.defDim(ncid,'length',numcol);
varid = netcdf.defVar(ncid,'monthlypdsi','NC_DOUBLE',[dimidrow dimidcol]);
netcdf.endDef(ncid);
netcdf.putVar(ncid,varid,my_data);
netcdf.close(ncid);
ncid2 = netcdf.open('somefile.nc','NC_NOWRITE');
data_copy = netcdf.getVar(ncid2,0);
if isequal(my_data,data_copy)
disp('Data match');
else
disp('Data mis-match');
end
Hope it helps!

Petar Milin
Petar Milin on 15 Mar 2020
Edited: Petar Milin on 15 Mar 2020
Hi Jemima,
I see that your code is very explicit, taking all the steps. Meanwhile, I've tried this and it seems to work. However, I would really appreciate if you can advise whether you do see some (hidden) issues with my "shortened" version:
my_data = rand(400,600);
noX = size(my_data,1);
noY = size(my_data,2);
nccreate("file.nc","MyMatrix","Dimensions", {"x",noX,"y",noY},"FillValue","disable");
ncwrite("file.nc","MyMatrix",my_data);
I have found this on several HowTo's places here, at MATLAB Community/Support.
Please, advise.

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!