How to write a 3d variable to a netcdf
古いコメントを表示
I want to extract a variable from an existing NetCDF file, Shift its dimensions and write the shifted variable to a new netcdf which is a copy of existing file by rewriting existing variable. So far I am able to extract a variable from an existing NetCDF file and Shift its dimensions but getting error when trying to write it to a new netcdf file
clc
clear all
data=ncread('MISR_AM1_AS_AEROSOL_P125_O075081_F13_0023.nc','/4.4_KM_PRODUCTS/Spectral_AOD_Scaling_Coeff')
Shift= shiftdim(data,1)
copyfile(which('MISR_AM1_AS_AEROSOL_P125_O075081_F13_0023.nc'),'myfile.nc');
ncdisp('myfile.nc','/4.4_KM_PRODUCTS/Spectral_AOD_Scaling_Coeff');
ncwrite('myfile.nc','/4.4_KM_PRODUCTS/Spectral_AOD_Scaling_Coeff',Shift);
ncdisp('myfile.nc','/4.4_KM_PRODUCTS/Spectral_AOD_Scaling_Coeff');
where
MISR_AM1_AS_AEROSOL_P125_O075081_F13_0023.nc
is the existing nc file
/4.4_KM_PRODUCTS/Spectral_AOD_Scaling_Coeff
Is the subfolder and existing variable
and the error which Iam getting is
Error using netcdflib
The NetCDF library encountered an error during execution of 'putVaraDouble' function - 'Start+count exceeds dimension
bound (NC_EEDGE)'.
Error in netcdf.putVar (line 84)
netcdflib(funcstr,ncid,varid,varargin{:});
Error in internal.matlab.imagesci.nc/write (line 831)
netcdf.putVar(gid, varid,start, count, varData);
Error in ncwrite (line 75)
ncObj.write(varName, varData, start, stride);
Error in netcdfread (line 9)
ncwrite('myfile.nc','/4.4_KM_PRODUCTS/Spectral_AOD_Scaling_Coeff',Shift);
Any suggetion or correction will be very much helpful,
Thanks alot in advance.
7 件のコメント
Walter Roberson
2019 年 3 月 23 日
When you copyfile, the output file still contains all of the variables in the input file. You need to extract all of the variables and attributes and write them to the new file along with changed variable -- unless you use an external utility to delete a variable (which will end up copying etc. itself, but at least you could be sure that it would do so correctly.)
Amalu A
2019 年 3 月 24 日
Walter Roberson
2019 年 3 月 24 日
I would have thought that what you are doing here would work -- unless, that is, that myfile.nc already exists, in which case you would be overwriting the same variable but with different size. Perhaps you should dynamically create the file name
ncvarname = '/4.4_KM_PRODUCTS/Spectral_AOD_Scaling_Coeff');
projectdir = pwd;
dinfo = dir( fullfile(projectdir, 'MISR*AEROSOL_P125*.nc'));
filenames = fullfile(projectdir, {dinfo.name});
nfiles = length(filenames);
for K = 1 : nfiles
filename = filenames{K};
[folder, basename, ext] = fileparts(filename);
newfilename = fullfile(folder, ['SASC_', basename, ext]);
data = ncread(filename, ncvarname);
Shift = shiftdim(data, 1);
ncreate(newfilename, ncvarname);
ncwrite(newfilename, ncvarname, Shift);
end
This would use the same file name as input, but prefixed with SASC_
Walter Roberson
2019 年 3 月 25 日
Please experiment with the attached.
Amalu A
2019 年 3 月 30 日
回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で NetCDF についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!