2014-01-17 127 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和其他被忽略。

相關問題