【问题标题】:Requested output arguments of a function [duplicate]函数的请求输出参数[重复]
【发布时间】:2019-02-08 17:48:09
【问题描述】:

假设我有

function [a, b] = foo
a = 1;
b = 2;

用户正在调用

[~, B] = foo;

我只希望发生b = 2,以防止耗时的操作a = 1。有没有办法查出a 实际上不是用户请求的?

很久以前it was not possible。我想知道 Mathworks 是否对此进行了改进,或者是否有人在此期间找到了解决方法。

注意:反之亦然:如果用户调用A = foo,则nargout 为1。

【问题讨论】:

  • 啊,2015 年才刚刚过去 :​​)
  • 嗨 texnic,请在原始问题上打开赏金请求更新/现代参考,而不是提出单独的问题。
  • 即使有可能,操作 a = 1 也会同样执行

标签: matlab function optimization output


【解决方案1】:

这是不可能的。仅仅因为您在函数的返回点不需要中间输出,并不意味着它的计算是不必要的函数中,除非你明确地编写你的函数来这样做。

例如,输出 3 的计算可能取决于函数内部的输出 2,即使在输出时没有明确请求)。 Matlab 无法知道这一点,因此它不能假设任何和所有涉及该输出的计算都可以被丢弃。

如果您需要一种高效的内存方式来确保只进行正确的计算,那么请更改您的输出策略。

我建议返回一个具有正确字段的结构,您可以在其中请求函数调用时所需的字段。这样,您的最终结构将只包含您想要的字段,并且您可以确保在您的函数内部不会发生不必要的计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2022-11-06
    • 1970-01-01
    • 2014-10-03
    • 2019-12-14
    相关资源
    最近更新 更多