问题陈述:我正在尝试为主调用函数编写 MATLAB 代码(如下run_experiment),以指定我要执行哪些计算,其中使用其他 MATLAB 函数按顺序进行计算。这些其他函数将根据与主调用方函数传递的参数进行评估。计算中使用的上述函数应使用编写它们的脚本的名称来指定。
所需代码行为示例:例如,如下所示的命令应运行preprocess_data、initialise_model和train_model脚本。
>> run_experiment('dataset_1_options', '|preprocess_data|initialise_model|train_model|');
此命令应仅运行train_model脚本,但也应评估其性能:
>> run_experiment('dataset_1_options', '|train_model|evaluate_model|');
在上面的示例中,"|"用作分隔符,以指定要计算的单独函数名称。这些函数使用与dataset_1_options指定的选项。请不要关注如何将这部分输入分成有意义的函数名称;我知道如何使用strsplit来做到这一点。
约束和规范:要作为输入传递给主调用方函数的函数名称不是匿名函数。目的是能够将此类多个函数名称作为输入传递,并使用类似上述示例的选项对其进行评估。它们返回要在研究代码的其他部分进行评估的输出(即将数据矩阵作为在其中执行的计算的结果传递给研究代码中的其他函数)。
问题:鉴于上面提到的所需行为和约束,任何人都可以帮助如何将另一个调用者函数的单独函数名称以及选项/参数传递给这些函数吗?主调用方函数应如何使用调用期间指定的选项评估作为输入传入的函数名称?
提前谢谢你。
您可以将函数传递给 matlab 中的函数。您只需要在传递时使用 @ 符号即可。在您的情况下,它将在脚本中run_experiment("dataset_1_options",@train_model)。您可以将选项保留在单元格数组或其他东西中。run_experiment函数只是一个常规函数,
function [output] = run_experiment(options, train_model, ...);
train_model(options{1}, ...)
.
.
.
end
您需要做的是创建一个包含函数名称的单元格数组和另一个具有相应选项的数组,如下所示
% Function name array
fn_array = {@fn_1, @fn_2, ...};
% Option array
option_array = {{fn1_opt1, fn2opt2, ...}; {fn2_opt1, fn2_opt2, ...};, ...};
这两个需要传递给您的run_experiment函数,该函数将按如下方式评估它们
function run_experiment(fn_array, option_array)
num_fn = length(fn_array); %Finds number of functions to evaluate
for ii = 1:num_fn %Evaluates each function
fn_array{ii}(option_array{ii}{:});
end