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,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 回答