2014-01-20 8 views
0

'lffd1961_V10M_Iberia.nc', 'lffd1962_V10M_Iberia'... 'lffd2000_V10M_Iberia'라는 40 개의 netcdf 파일이 있습니다.여러 개의 netcdf 파일 읽기 - matlab

모두 동일한 프로그램에서 열어서 모두 동일한 변수를 얻고 해당 변수에 일부 방정식을 적용하고 해당 변수를 수정 한 40 개의 새 netcdf 파일을 만듭니다.

40 개의 파일을 열려면이 코드를 개발했고 제대로 작동해야합니다.

for yr=1961:2000 
inFile=strcat('lffd',num2str(yr),'_V10M_Iberia.nc'); disp(inFile) 
nc=netcdf.open(inFile,'NC_NOWRITE'); 
netcdf.close(nc) 
end 

이제 변수 4가 모두 필요합니다. 이 변수는 3D 매트릭스 (70x51x (8760 또는 8784))이 다음 라인처럼하지만 40 년 루프 뭔가입니다 :

ws_1961(1962, etc, etc) = netcdf.getVar(nc,4); 

내 작업 공간 (40 개) 새 변수를 가질하기로했다.

ws_80 = ws.*(log(z/alpha)/log(exp(1))/(log(10/alpha)/log(exp(1)))); 

를 마지막으로 각 파일에 나의 새로운 변수로 (40 개) 새 netCDF의 파일을 만들 : 이후 나는 그 (40 개) 모든 변수에서이 방정식을 적용 할. 그런

뭔가 : 내가 당신의 모든 당신이 원하는 무엇이든 물어 편하지 바랍니다 그래서 이해하는 방식으로이 문제를 설명하기 위해

outFile=strcat('year',num2str(yr),'_80m.nc') 
ncid = netcdf.create(outFile,'CLOBBER'); 

dimid0 = netcdf.defDim(ncid,'longitude',nlon); % getvar number 1 
dimid1 = netcdf.defDim(ncid,'latitude',nlat); %getvar number 2 
dimid2 = netcdf.defDim(ncid,'time',nt); %getvar number 3 

varid0 = netcdf.defVar(ncid,'longitude','double', dimid0); 
varid1 = netcdf.defVar(ncid,'latitude','double', dimid1); 
varid2 = netcdf.defVar(ncid,'time','double', dimid2); 
varid3 = netcdf.defVar(ncid,'ws_80','double', [dimid0 dimid1 dimid2]); 

netcdf.putAtt(ncid,varid0,'units','degrees_east'); 
netcdf.putAtt(ncid,varid0,'long_name','longitude'); 

netcdf.putAtt(ncid,varid1,'units','degrees_north'); 
netcdf.putAtt(ncid,varid1,'degrees_north','latitude'); 

netcdf.endDef(ncid); 

netcdf.putVar(ncid,varid0,longitude); 
netcdf.putVar(ncid,varid1,latitude); 
netcdf.putVar(ncid,varid2,time); 
netcdf.putVar(ncid,varid3,ws80); 

그것은 어렵다.

+0

어디서 붙어서 도움이 필요합니까? 귀하의 방정식이 모든 파일의 모든 데이터를 하나의 변수로 요구하는지는 분명하지 않습니다. 그렇지 않다면 한 번에 한 파일 씩 작업하는 것이 좋습니다 (수식 읽기, 쓰기). ncread, ncinfo, ncwriteschema 및 ncwrite와 같은 상위 수준 기능을 사용하는 것이 더 쉬울 것입니다. –

+0

부품으로 도와 주시겠습니까? 내 모든 .nc 파일이 열리는 첫 번째 루프가 정상적으로 작동합니다. 네 번째 위치 인 'netcdf.getVar (nc, 4);'에서 모든 변수를 얻으려면 루프가 필요합니다. 각 파일에. 내 다음 단계는 내 작업 영역에 40 개의 변수 (각 파일 중 하나)가 있습니다. – rochinha44

+0

버전에 ncread 기능이 있습니까? 그리고 다시, 방정식을 적용하기 위해서는 40 개의 변수가 모두 필요합니까? 또는 한 번에 하나의 변수에 방정식을 적용 할 수 있습니까? –

답변

2

여기에 '에어 코드'가 있습니다.

% The variable we want to process 
myVarName = 'ws_80'; 

for yr=1961:2000 
    inFile = strcat('lffd',num2str(yr),'_V10M_Iberia.nc'); 
    disp(inFile); 
    outFile = strcat('lffd',num2str(yr),'_V10M_Iberia_processed.nc'); 
    disp(outFile); 

    % copy input file to create a template for the output 
    copyDone = copyfile(inFile, outFile,'f'); 
    if(~copyDone) 
     error('Could not copy file'); 
    end 

    % Read variable 
    inVar = ncread(inFile,myVarName); 

    % Replace this line with your equation 
    outVar = myProcessFunction(inVar); 

    % Write variable 
    ncwrite(outFile, myVarName, outVar); 

end 

목표를 수정하려면이 설정을 수정해야합니다. 시도해보고 붙어있는 곳에 다시 게시하십시오.

+0

귀하의 '에어 코드'가 내 모든 요구에 정확하게 응답했습니다. 대단히 감사합니다. 너에게 고마워. – rochinha44