2012-05-27 173 views
0

我在Matlab中使用了一个有多个输出的函数,但我只对其中一个输出感兴趣。我想抑制其他输出变量(即避免它们被返回并放入内存中)。例如,使用最大功能:在matlab中抑制输出变量

[output1 output2] = max(matrixA, [], 1); 
% output1 returns the maximum, which i'm not interested in 
% output2 returns the index of the maximum, which i *am* interested in 

有没有任何方法可以调用该函数,以便不返回output1?如果存在,是否提供了超过上述计算的内存优势,但是立即调用clear output1将内存中的输出1删除?

感谢您的帮助。

+0

[如何优雅地忽略MATLAB函数的某些返回值?](http://stackoverflow.com/questions/747296/how-to-elegantly-ignore-some-return-values-of-a -matlab函数)。还[忽略返回值语法?](http://stackoverflow.com/q/5177229/97160)和[MATLAB黑洞变量](http://stackoverflow.com/questions/5407465/matlab-black-hole-variable ) – Amro

+1

@Amro唯一的区别似乎是提及性能方面的考虑,但据我所知,没有。 –

+3

@reve_etrange:我想如果你真的想避免不必要的计算,你将不得不设计你的函数来返回'varargout'参数,并且重写它只在计算足够的输出参数时才执行计算(用'nargout'确定)价值) – Amro

回答

5

使用波浪号:

[~, output2] = max(matrixA, [], 1); 

我怀疑会有多少内存的优势(除了文秘类的东西分配输出变量等),因为该功能)将完全运行和分配所有它需要。这样,您只是不会获得该值,并且max函数范围内的第一个输出变量的值将被垃圾收集。

+3

注意这是在老版本的matlab下无法使用的。我相信这是从大约R2009b实施... –

+0

不知道 - 谢谢你指出!人们在2009年之前做了什么? – Ansari

+0

看到这[问题](http://stackoverflow.com/questions/747296/how-to-elegantly-ignore-some-return-values-of-a-matlab-function)(其中这似乎是重复的)。其中一个答案有另一种选择。 –

2

~字符替换您不需要的任何输出变量。

E.g.

[~,I] = max(matrix); 

这个模式有过在MATLAB的解释和刚刚在即时编译器可避免计算忽略变量的内存和CPU成本clear的优势。

编辑

这里是documentationblog post由罗兰舒尔在此使用的~。我无法找到任何有关使用忽略变量的明确信息来消除不必要的计算。