朋友们,我是matlab的新手。我想出了一个代码,可以在一个回合中将所有nc文件转换为mat文件。我用了一个for循环。一切都很好,我能够成功转换所有文件。但是有一个小缺点。所有文件都具有相同的变量名称(显示在工作区中)。这需要手动重命名。我认为这是由于我的matlab语法限制。我将代码放在下面。如果你可以建议一个方法,那将是很棒的。修复后,任何人都可以节省代码。
%Author--
%converting nc file to mat file
% Start_year = 1948;
% End_year = 2012;
rainfall_ncep_ncar= cell(1948, 2012);
clear
for i=1948 : 2012
% inputfile = strcat('prate.sfc.gauss.', num2str(i),'.nc');
% disp(inputfile);
rainfall_ncep_ncar{i} = strcat('rainfall_ncep_ncar', num2str(i));
% disp(rainfall_ncep_ncar_{i});
% disp(outfile);
% disp(year);
%clear other existing variables
%Output_filename = '../NCER_precipitation_rate_mat/rainfall_data_' +year;
% check ='../NCER_precipitation_rate_mat/'inputfile;
Input_path =strcat('../NCEP_precipitation_rate_nc/prate.sfc.gauss.', num2str(i),'.nc');
%display(Input_path);
ncid = netcdf.open(Input_path, 'NC_NOWRITE');
try
prateId = netcdf.inqVarID(ncid, 'prate');
catch exception
if strcmp(exception.identifier,'MATLAB:imagesci:netcdf:libraryFailure')
str = 'prateId not found';
end
end
%disp(rainfall_ncep_ncar{i});
rainfall = netcdf.getVar(ncid,prateId);
%rainfall{i}= netcdf.getVar(ncid,prateId);
Output_file = strcat('rainfall_ncep_ncar_', num2str(i),'.mat');
%disp(Output_file);
Output_path = strcat('f2/prate.sfc.gauss.', num2str(i),'.mat');
save(Output_path, 'rainfall');
disp(Output_path);
disp('done');
netcdf.close(ncid);
end
clear
当我尝试使用
时 rainfall_ncep_ncar{i}=netcdf.getVar(ncid,prateId);
save(Output_path, 'rainfall_ncep_ncar{i}');
取代
rainfall = netcdf.getVar(ncid,prateId);
save(Output_path, 'rainfall');
显示以下错误
run('H:\btp\mexnc files\nc_to_mat_all.m')
Error using save
'rainfall_ncep_ncar{i}' is not a valid variable name.
Error in nc_to_mat_all (line 40)
save(Output_path, 'rainfall_ncep_ncar{i}');
Error in run (line 57)
evalin('caller', [s ';']);
我想保存每个文件,如f2 / prate.sfc.gauss.1948.mat以及工作区中的相应变量prate.sfc.gauss.1948或1948或具有年份的东西。我该怎么办?
提前致谢!!
答案 0 :(得分:2)
弹出错误的原因很简单 - "'rainfall_ncep_ncar{i}' is not a valid variable name."
如果不制作另一个变量,则无法保存单个单元格。 编辑: rainfall_ncep_ncar
是工作空间中的变量,但rainfall_ncep_ncar{i}
不是,因此它不是第二个保存参数的有效字符串。在保存之前,需要先将单元格提取到另一个变量(例如rainfall
)中。
还有其他几点。
当你打电话给rainfall_ncep_ncar= cell(1948, 2012);
时,到2012年你正在制作一个大小为1948的二维单元阵列。从这个单元阵列所代表的位置来看,这绝对不是你想要的!您希望使用单元格生成2012 - 1948 x 1单元格的单元格。
为什么要将每个单元格保存在不同的mat文件中?如果您稍后要使用它,在大多数情况下,您可能会更好地在一个mat文件中将循环结束时的单元格数组保存。事实上,在这种情况下,没有真正的理由使用单元阵列!
希望有所帮助。