如何修改函数中的数组?

MATLAB是一种通过价值语言。 我有一个递归函数来处理像素的邻居。 每次调用函数时,复制图像(在我的情况下是两张图像)是非常昂贵的。

我使用全局变量来解决问题。 有没有其他方法可以使递归函数修改数组?


这里有三个选项,但也许你不需要其中的任何一个,因为Matlab使用'copy-on-write',即只有修改它们才会复制变量。

  • 正如@gnovice提到的,你可以使用嵌套函数。 嵌套函数内使用的变量在嵌套函数和封闭函数之间共享。 嵌套函数调试有点棘手,编写/理解起来更复杂一些。
  • 您可以将图像存储为通过引用传递的句柄对象的属性。
  • 你可以编写不同的代码,以便不使用递归函数,因为Matlab不是使用这些函数的最佳语言。 如果您有权访问图像处理工具箱,则可以使用blockprocim2col函数来重写该函数。
  • 最后,如果你想继续使用当前的方案,我强烈建议使用持久变量而不是全局变量。


    MATLAB并不总是按值传递的,在某些情况下,MATLAB的新版本可以通过引用传递,请参阅本SO帖子中的就地操作和有关MATLAB内存管理的更一般性讨论。

    如果没有tail-call优化,使用递归效率低下,并且MATLAB不知道它,但是每个递归都可以转化为循环。


    如果将递归函数作为存储图像数据的另一个函数中的嵌套函数,则递归函数可以修改图像数据而无需传递给它。

    链接地址: http://www.djcxy.com/p/80511.html

    上一篇: How to modify an array in function?

    下一篇: Why use callback in JavaScript, what are its advantages?