필터 지우기
필터 지우기

Time series extraction from netcdf

조회 수: 3 (최근 30일)
Tobenna Uzuegbunam
Tobenna Uzuegbunam 2021년 2월 11일
댓글: Tobenna Uzuegbunam 2021년 2월 11일
I'm trying to extract a timeseries from a netcdf file linked here: " https://www.dropbox.com/s/qi3dv1ohpxlcp3y/MetO-NWS-WAV-hi_1612364408068.nc?dl=0 ", but I get the error message: "Index in position 3 is invalid. Array indices must be positive integers or logical values".
The code I have used is below:
filename = ('METO-NWS-WAV-hi_1612364408068.nc');
info = ncinfo(filename);
ncid=netcdf.open(filename,'nowrite');
% Get information about the contents of the file.
[numdims, numvars, numglobalatts, unlimdimID] = netcdf.inq(ncid);
disp(' '),disp(' '),disp(' ')
disp('________________________________________________________')
disp('^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~')
disp(['VARIABLES CONTAINED IN THE netCDF FILE: ' filename ])
disp(' ')
for i = 0:numvars-1
[varname, xtype, dimids, numatts] = netcdf.inqVar(ncid,i);
disp(['--------------------< ' varname ' >---------------------'])
flag = 0;
for j = 0:numatts - 1
attname1 = netcdf.inqAttName(ncid,i,j);
attname2 = netcdf.getAtt(ncid,i,attname1);
disp([attname1 ': ' num2str(attname2)])
if strmatch('add_offset',attname1)
offset = attname2;
end
if strmatch('scale_factor',attname1)
scale = attname2;
flag = 1;
end
end
disp(' ')
if flag
eval([varname '= double(double(netcdf.getVar(ncid,i))*scale + offset);'])
else
eval([varname '= double(netcdf.getVar(ncid,i));'])
end
end
disp('^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~')
disp('________________________________________________________')
disp(' '),disp(' ')
% Load in a few selected variables
dtime = ncread(filename,'time');
dtime = dtime/(60*60*24)+datenum(1900,1,1); %Convert to Matlab time
VHM0 = ncread(filename,'VHM0');
VHM0(VHM0==0)=NaN; %Remove some bad points
VMDR = ncread(filename,'VMDR');
VMDR(VMDR==0)=NaN; %Remove some bad points
VTM02 = ncread(filename,'VTM02');
VTM02(VTM02==0)=NaN; %Remove some bad points
lon = ncread(filename,'longitude');
lon(lon==0)=NaN; %Remove some bad points
lat = ncread(filename,'latitude');
lat(lat==0)=NaN; %Remove some bad points
location_lat = knnsearch(lat,51.9);
location_lon = knnsearch(lon,1.6);
myVHM0Data = squeeze(VHM0(location_lon,location_lat,dtime));
myVHM0Datenum = dtime(time);
% Time Series Plots
figure(1)
subplot(3,1,1)
plot(myVHM0Datenum,myVHM0Data,'.')
datetick('keeplimits');
ylabel('Hs (m)')
subplot(3,1,2)
plot(myVHM0Datenum,VMDR,'.')
datetick('keeplimits');
ylabel('VMDR (degrees)')
title(source,'interpreter','none');
set(gca,'ydir','reverse'); %Flip the y-axis
subplot(3,1,3)
plot(myVHM0Datenum,VTM02,'.')
datetick('keeplimits');
ylabel('Tp (s)')
I would appreciate any help.
  댓글 수: 1
Tobenna Uzuegbunam
Tobenna Uzuegbunam 2021년 2월 11일
I may have been too hasty. The problem was with 'myVHM0Data' and 'myVHM0Datenum'. the correction would be:
myVHM0Data=squeeze(VHM0(location_lon,location_lat,: ) );
myDatenum = dtime(:);
If anyone needs this.

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

답변 (0개)

카테고리

Help CenterFile Exchange에서 NetCDF에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by