Matlab:将所有参数传递给函数句柄
我在一系列文件上运行了很多函数。因此,创建一个在文件上运行函数的函数是合乎逻辑的,而不是在每个文件中重复该过程。问题是每个函数的参数数量不同! 因此,psudo代码是:Matlab:将所有参数传递给函数句柄,matlab,arguments,function-handle,Matlab,Arguments,Function Handle,我在一系列文件上运行了很多函数。因此,创建一个在文件上运行函数的函数是合乎逻辑的,而不是在每个文件中重复该过程。问题是每个函数的参数数量不同! 因此,psudo代码是: function [out1, out2]=batchDo(@func,adrs,arg1,arg2,...,argn) files=ls(adrs); for i=1:length(files) raw=load([adrs files(i)]); [out1, out2]=func(raw,arg1,arg
function [out1, out2]=batchDo(@func,adrs,arg1,arg2,...,argn)
files=ls(adrs);
for i=1:length(files)
raw=load([adrs files(i)]);
[out1, out2]=func(raw,arg1,arg2,...,argn)
out1s=out1+out1s;
out2s=out2+out2s;
end
out1=out1s/length(files);
out2=out2s/length(files);
幸运的是,在我的例子中,输出几乎是相似的,我可以添加一些假人使它们都相似。但如果有类似的解决方法,我将不胜感激。如果输入的顺序(或可以重新排序),例如:
- 所有函数都采用参数1到3
- 接受附加参数的函数按顺序接受这些参数:arg4到arg8,arg4到arg10,等等
varargin
添加到每个不使用完整参数集的函数中,而只替换未使用的参数(就像定义可选参数一样),然后在实际函数中忽略它。因此,函数可能是:
function myfunction(raw, arg1, arg2, arg3, arg4, arg5, varargin)
实际上,这只使用arg1…arg5,其他的被忽略。霍奇勒的答案是正确的,如果我只是将varargin作为varargin{:}传递,它会自动提供我所需要的。
如果在所有函数中使用varargin,然后尝试寻址varargin.arg1而不是arg1,则会降低代码的速度。有很多文章对性能进行了比较。我不想使用varargin,因为我的数据太大,对字段进行寻址会使例程速度非常慢。如果您只使用
arg1
等。对于func
,是否可以只使用varargin
而不单独对单元格进行寻址,即func>(raw,varargin{:})
?或者创建一个匿名函数来捕获相关参数并将其传递给其他人,例如,func2=@(raw)func(raw,arg1,arg2,…,argn)
。我不确定任何人应该如何回答这个问题——这近乎于“不清楚你在问什么”我认为你需要解释一下你对varargin的反对。它不应该太慢,而且很明显,它是MATLAB中用于不同数量参数的明显机制。