如何将多个(非单元)参数传递给 Octave 的 parcellfun() 中的函数?
Posted
技术标签:
【中文标题】如何将多个(非单元)参数传递给 Octave 的 parcellfun() 中的函数?【英文标题】:How to pass multiple (non-cell) arguments to a function in Octave's parcellfun( )? 【发布时间】:2015-04-23 10:21:33 【问题描述】:有没有办法将额外的数字参数传递给parcellfun()
中的函数(或句柄)?
例如,如果我有一个单元格数组 Images
,并且我想将 medfilt2()
应用于它们,我将编写如下内容:
Images = parcellfun( nproc, @medfilt2, Images, 'UniformOutput', false );
如果有的话,有什么方法可以将附加参数传递给medfilt2
,在这种情况下,假设是[7 7]
?
Octave 的帮助是这样说的:
[O1, O2, ...] = parcellfun (NPROC, FUN, A1, A2, ...)
.. A1、A2 等应该是大小相等的元胞数组。
GNU Octave 3.8.1,以防万一。
【问题讨论】:
【参考方案1】:您希望所有输入的参数相同,创建一个匿名函数:
medfilt2wparam=@(A)medfilt2(A, [7 7])
现在使用你已有的代码和函数medfilt2wparam
【讨论】:
谢谢,这很聪明!我不熟悉 Octave 如何处理这些函数,所以你能说一下这会涉及什么开销吗? 我没有找到任何八度音阶的数字,但您可以运行此代码来比较这些值:***.com/questions/1673193 如果我记得正确的八度音阶比 matlab 慢,那么您选择哪种方式并不重要用于调用函数(匿名、句柄等),因为开销大致相同。 看起来匿名函数需要更多时间。与 Matlab 相比,我无法对 Octave 的速度做出一般性陈述,但我已经看到并执行了在 Octave (Linux) 上比在 Matlab (Windows) 上运行更快的代码。不过,我可能忽略了一些差异。 @a-Jays 正如comment #11 of a patch 中所述,匿名函数是标准方式。另外parcellfun
本身的开销也比匿名函数调用要大。
@ederag 同意,尽管您的最后陈述可能不是这样,但请查看此线程前面提到的另一个问题的链接。以上是关于如何将多个(非单元)参数传递给 Octave 的 parcellfun() 中的函数?的主要内容,如果未能解决你的问题,请参考以下文章