我有40个netcdf文件名为'lffd1961_V10M_Iberia.nc','lffd1962_V10M_Iberia'...'lffd2000_V10M_Iberia'。
我希望在同一个程序中打开所有这些变量,在所有程序中获取相同的变量,在该变量中应用一些等式,并创建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个新变量。 在此之后,我想在所有40个变量中应用这个等式:
ws_80 = ws.*(log(z/alpha)/log(exp(1))/(log(10/alpha)/log(exp(1))));
最后在每个文件中使用我的新变量创建40个新的netcdf文件。
类似的东西:
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 :(得分: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
您必须对其进行修改以适应您的目标。试一试,然后回到你被卡住的地方。