【问题标题】:Matlab Optimization, Alternatives for 'any' functionMatlab 优化,“任何”函数的替代方案
【发布时间】:2014-01-27 12:30:49
【问题描述】:

有什么办法可以优化下面的代码。

上面的函数是一个嵌套函数,finalBin2Grey 是一个单元格,其余都是简单的双精度和数组。

此外,MATLAB 分析器显示所有其他行的功能为 41.122 s。但是没有这样的行/行占用那段时间。这是调用函数的开销还是我错过了什么?

编辑: 以下是该函数作用的高级概述:

检查grayLevel 是否位于upperLimitlowerLimit 之间,如果是则返回true。

此外,grayLevel 不能等于 upperLimitlowerLimit 才能成立。

单元格finalBin2grey 包含一个双精度或双精度数组,具体取决于索引。

【问题讨论】:

  • “但是没有这样一行/几行占用那段时间” - 呃,“所有”那些不是的“其他行”怎么样?大部分时间都花在了”?你甚至向我们展示了其中的一些,所以我保证它们存在;)

标签: matlab optimization


【解决方案1】:

我不确定是any。很可能是使用==。这里有一些可供尝试的选项(如果没有minimal, complete, tested and readable example,几乎不可能提供具体的帮助)。

我不确定您是否需要第二个 if/else 声明。以下内容就足够了:

bool = any(grayLevel>lowerLimit) && any(grayLevel<upperLimit);

仅当任何grayLevel 严格在限制之间时它才返回true,否则返回零。您可能希望将 &gt; 替换为 &gt;= 或将 &lt; 替换为 &lt;= 以确保不会遗漏边缘上的点。

【讨论】:

  • 不幸的是,该行未能捕获“没有什么等于限制,但至少 something 高于 lowerLimit 并且至少 something 低于 upperLimit”行为。当然,我看的越多,它就越没有意义,因为即使没有任何东西 两个限制之间,它也可能是真的,这与函数名称非常不一致......
  • 还有知道为什么访问一个单元格数组会占用这么多时间吗?
  • @polavarapu:如果不知道如何使用/调用函数以及输入是什么,很难说更多。但是看看调用次数(超过 450 万!),您的实际问题似乎是您需要矢量化。您每次通话的时间还不错。
  • @horchler 感谢您提供有关 if/else 的提示。不过,关于“任何”的建议有一点逻辑缺陷。我更正了它,if/else 提示确实得到了回报,提升了大约 30 秒。!
【解决方案2】:

我怀疑您重新发明了 HISTC 或 IMHIST。整个例程可以通过使用其中之一来优化。

【讨论】:

  • 没有。上述函数与imhist和histc完全不同
猜你喜欢
  • 2014-05-26
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 2021-10-07
相关资源
最近更新 更多