您好朋友我是matlab新手。我想出了一個代碼,它可以在一回閤中將所有nc文件轉換爲mat文件。我使用了一個for循環。一切都很好,我可以成功轉換所有文件。但是有一個小缺點。所有文件具有相同的變量名稱(出現在工作區中)。這需要手動重命名。我認爲這是由於我的matlab語法限制。我在下面放置代碼。如果你能提出一個方法,這將是非常棒的。修復後,這將是真正節省時間的代碼給任何人。保存具有可變輸入名稱的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年或某年。我該怎麼做??
在此先感謝!
在每次迭代中將數據保存到文件中,因此不需要將數據存儲爲單元陣列。爲什麼你不能在所有的迭代中使用相同的變量'降雨量'(沒有{i}):保存當前的數據,並用新數據運行下一次迭代時的「降雨量」,並保存等等。 – Adiel
沒有測試我會說只是使用'保存(Output_path,rainfall_ncep_ncar {i});'沒有''' – thewaywewalk
不回答你的問題,但'sprintf('f2/prate.sfc.gauss。%d.mat',我)'而不是strcat會增加你的代碼的可讀性。順便說一句,''rainfall_ncep_ncar {i}''不是工作區中變量的名稱('''rainfall_ncep_ncar'是'變量的名稱'),但我仍然沒有得到通過增加複雜性的觀點使用單元格陣列,因爲你的問題更多地是關於文件名... – Pascail