如何用〜来确定是否忽略输出

Joh*_*ohn 8 reflection matlab function

在Matlab中,您可以使用以下语法忽略输出:

[~, ixMax] = max(foo);
Run Code Online (Sandbox Code Playgroud)

我有一个功能,有签名

[out, out1, out2, out3] = function foo(in1, in2, in3)
Run Code Online (Sandbox Code Playgroud)

out1,out2并且out3是可选输出,每个仅在非常特定(不寻常)的情况下需要. Foo在计算上是昂贵的,并且out1/ out2或者out3都在计算上更加昂贵,但依赖于由中间生成的中间状态foo.我希望能够避免计算out1/ out2/ out3如果调用者使用a ~来忽略它们.我如何在定义中检查foo

alp*_*ra7 6

它不会加速这个过程.这~是一种让读者告诉他你不需要这些输出的方法.它还节省了此变量的内存使用量.

Matlab文档说:

但是,某些函数会返回使用更多内存的结果.如果您不需要这些变量,则会浪费系统空间.

因此,它不会提高性能,因为这些值无论如何都是内部计算的.

Yair M. Altman 的书" 加速MATLAB性能:1001提示加速MATLAB程序 "(p187):

在此输入图像描述

但是,如果不使用~,并且如果需要第一个输出,则用户只需移除~括号和写入即可获得计算时间.

out = function foo(in1, in2, in3)
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案!只是一个警告:奥特曼的书中引用的文字说,只要它们出现,就应该从代码中删除_trailing`~`符号.这并非总是如此.某些函数在使用两个输出调用时返回不同的第一个输出.比较例如`a = find(1:3)`和`[a,〜] = find(1:3)` (3认同)
  • @AnderBiguri,是的,我的回答只关注于`~`部分.如果只需要第一个输出,那么你是对的. (2认同)