如何将多个(非单元)参数传递给 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() 中的函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个原始参数传递给 AsyncTask?

如何将多个原始参数传递给 AsyncTask?

如何将多个参数传递给 Process?

如何将命令输出作为多个参数传递给另一个命令

如何将多个参数传递给 ASP.NET Core 中的 get 方法

如何将多个重复的参数传递给 CUDA 内核