2012-07-12 118 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