how could i stack multiple satellite data of soil moisture in to one and find out the nanmean of all files? The size of files is 1440*720. The file is in '.nc' format.

조회 수: 1 (최근 30일)
% read the all nc file
file = dir('*.nc');
for i = 1:length(file);
sm(i) = sm(:,:,i);
sm.mean = nanmean(:,:,i)

답변 (1개)

dpb
dpb 2023년 5월 24일
편집: dpb 2023년 5월 24일
% read the all nc file
d= dir('*.nc'); % dir() returns a struct, not a file or even a file name...
varname='THEVARIABLEYOUWANT'; % set this appropriately
sm=[]; % placeholder to catenate images
for i = 1:numel(d)
ncid = netcdf.open(fullfile(d(i).folder,d(i).name),'NC_NOWRITE');
varid = netcdf.inqVarID(ncid,varname); % find the id number in the file to match
sm=cat(3,sm,netcdf.getVar(ncid,varid)); % read each, add to 3D array
end
sm.mean=mean(sm,3,'omitnan'); % compute mean over images
You may need to add size of array to read; I don't have enough familiarity with netCDF format to know whether the getVar method can return an array by var id or not; would presume it can, but don't know.
You may also be able to use the variable name in the varid location instead of inquiring for its postion; that's not documented in the (pretty poor in comparison to standard MATLAB doc) doc file; the input/output variables sections are notable in their being absent so no descriptions given.
It would be more efficient to preallocate the 3D array and store each into the next plane (or use a cell array of 2D arrays), but unless the number is quite large, the above shouldn't be too bad...

카테고리

Help CenterFile Exchange에서 Characters and Strings에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by