0

私は現在、次のようなMATLAB関数を持っています。

function outfile=multi_read(modelfrom,modelto,type)

models=[modelfrom:1:modelto];
num_models=length(models);

model_path='../MODELS/GRADIENT/'

for id=1:num_models
    fn=[model_path num2str(models(id)) '/'];  %Location of file to be read
    outfile=model_read(fn,type);              %model_read is a separate function
end
end

この関数の考え方はmodel_read、一連のファイルに対して別の関数を実行し、これらのファイルを(ディスクではなく)ワークスペースに出力することです。model_readからの出力は構造体であることに注意してください!次のように入力するのと同じように、関数が連続した名前を使用してファイルをワークスペースに保存するようにします。

file1=multi_read(1,1,x)
file2=multi_read(2,2,x)
file3=multi_read(3,3,x)
etc.

これにより、がワークスペースに表示されますがfile1、代わりにコマンドを1回だけ呼び出すと、次のようになります。file2file3

multi_read(1,3,x)

これにより、同じワークスペース出力が得られます。

基本的に私の質問は、関数を何度も呼び出さなくても、複数の名前の変数を出力する関数を取得するにはどうすればよいかということです。

4

2 に答える 2

2

コメントで示唆されているように、私はより堅牢なこのアプローチを試してみます、少なくとも私見:

    N = tot_num_of_your_files; %whatever it is          

    file = cellfun(@(i)multi_read(i,i,x),mat2cell(1:N,1,ones(1,N)),...
                         'UniformOutput' , false); %(x needs to be defined)

を実行してオブジェクトを回復しますfile{i}

于 2012-11-19T11:20:35.093 に答える
1

これがあなたが求めることをするためのコードです:

for i = 1:3
   istr=num2str(i)
   line = ['file' istr '= multi_read(' istr ', ' istr ', x)']
   eval(line)
end

または、次のコードを使用して、必要な処理を実行します。

for i = 1:3
    file{i} = multi_read(i,i,x)
end
于 2012-11-19T11:02:48.380 に答える