0

こんにちは、私は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 などのワークスペースにある対応する変数を保存したいと思います。どうすればいいのですか??

前もって感謝します !!

4

1 に答える 1

2

そのエラーがポップアップする理由は単純"'rainfall_ncep_ncar{i}' is not a valid variable name."です。別の変数を作成しないと、個々のセルを保存することはできません。EDIT: rainfall_ncep_ncarはワークスペース内の変数ですが、変数でrainfall_ncep_ncar{i}はないため、save の 2 番目のパラメーターとして有効な文字列ではありません。rainfallセルは、保存する前に、まず別の変数 ( など) に抽出する必要があります。

また、その他のポイントをいくつか。

  1. を呼び出すとrainfall_ncep_ncar= cell(1948, 2012);、サイズが 1948 x 2012 の 2D cell 配列が作成されます。その cell 配列が何を表しているかから判断すると、これは間違いなくあなたが望むものではありません! cell を使用して 2012 - 1948 x 1 サイズの cell 配列を生成します。

  2. 各セルを異なるマット ファイルに保存するのはなぜですか? ほとんどの場合、後で使用する場合は、ループの最後にある cell 配列を 1 つの mat ファイルに保存することをお勧めします。実際、この場合、セル配列を使用する本当の理由はありません!

それが役立つことを願っています。

于 2013-10-16T00:24:45.020 に答える