2012-07-12 117 views
14

我想將一個向量拼接成一個函數調用,但是我找不到一種方法來實現這個功能。可能嗎?Matlab ---將函數調用的參數轉換爲參數

爲了擴大我的意思,假設我們有長度爲n的矢量x和需要n參數的函數f。我想通過撥打f(x)f(splice(x))來致電f(x(1), x(2), ..., x(n))。如果x是單元陣列而不是矢量,則調用f(x{:})將得到期望的結果;只有當x是一個向量時纔會有一些等價物,這似乎是合理的。

我希望有一些操作員或功能,我失蹤。我可以打電話y = num2cell(x),然後f(y{:}),但這不是我正在尋找的。

+0

不是'x(:)'工作嗎?或者如果它是一個列向量,使用'x(:)''。 – Thor 2012-07-12 23:06:05

+0

「num2cell」路線正是您應該尋找的。 – Jonas 2012-07-12 23:51:16

+0

@Jonas不錯,因爲這個解決方案很簡單。但是我認爲我必須指定一個臨時變量(並且因此將變量的內容複製一段時間),這樣做有點愚蠢。爲什麼這個特徵存在於單元陣列中,而不是用於(可以說是更常見的)數值數組(即「matlab」中的「mat」)?無論如何,這就是爲什麼我問:這似乎是一個功能,可能支持,但我有點失蹤。 – zroth 2012-07-13 00:38:36

回答

7

正如評論

tmp = num2cell(x) 
f(tmp{:}) 

已經提到的是要走的路。

一個函數splice這樣f(splice(x))會做你想做的事,不會做詭計。 即使您可以將輸入拆分爲多個輸出,f也只接受第一個參數(類似於如果要在命令行調用該函數而不請求輸出)。

即使是subsref也不會在這種情況下工作,例如, subsref(num2cell([1 2]),struct('type','{}','subs',{{':'}}))將與splice功能相同,即只返回一個輸出,除非明確請求多個輸出。

+0

如果'f'需要多個參數,這個函數不允許你調用'f(splice(x))'。原因是matlab將請求的輸出參數數目解釋爲一個。你可以通過在函數定義中加入'disp(nargout);'來明確地看到它。 – zroth 2012-07-13 05:10:13

+0

@zroth:謝謝你的測試。 – Jonas 2012-07-13 11:27:54

+0

哦,你說得對。我完全忘了我可以像那樣明確地調用'subsref'。我不明白爲什麼你提出的'subsref'調用與爲'y = num2cell([1 2])調用'y {:}'不一樣。但是,正如你所說,這只是不起作用。感謝您的嘗試。 – zroth 2012-07-13 15:55:02