2014-01-17 129 views
-1

我在一系列文件上运行了很多函数。所以合理的做一个函数来运行我的文件功能,而不是在每个文件中重复这个过程。问题是每个功能的参数数目不同! 所以psudo代码是:Matlab:将所有参数传递给一个函数句柄

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); 
在我的情况下输出

幸运的是几乎相同的,我可以添加一些假人,使他们所有类似。但如果无论如何要以类似的方式解决它们,我将不胜感激。

+0

我不想使用varargin,因为我的数据很大,处理字段会使程序非常慢。 – anishtain4

+2

如果你只对'func'使用'arg1'等,你可以使用'varargin'来单独寻址单元格,即'func(raw,varargin {:})'?或者创建一个匿名函数来捕获相关的参数并将其传入,例如'func2 = @(raw)func(raw,arg1,arg2,...,argn)'。我不确定任何人应该回答这个问题 - 这与“不清楚你问的是什么”有关。 – horchler

+0

我认为你需要解释你对varargin的反对意见。它不应该很慢,并且显然是MATLAB中针对不同数量参数的明显机制。 – Peter

回答

0

Horchler答案是正确的,如果我只是通过varargin作为varargin {:},它会自动提供我所需要的。 如果您在每个函数中都使用varargin,然后尝试使用varargin.arg1而不是arg1,则会降低代码的速度。有很多文章比较表现。

1

如果输入是在某种顺序(或可以被重新排序),使得,例如:

  • 所有功能接受参数1至3个
  • 函数采取额外的参数采取它们按顺序:通过arg8,通过arg10 ARG4等ARG4

然后你就可以很简单地通过增加varargin每个不使用全套的参数功能做到这一点,但只有在发生的未使用的参数(仿佛定义了可选的论证ts),然后在实际功能中忽略它。所以一个函数可能是:

function myfunction(raw, arg1, arg2, arg3, arg4, arg5, varargin) 

其中这实际上这只使用arg1 ... arg5和其他被忽略。

相关问题