2012-05-27 218 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由羅蘭舒爾在此使用的~。我無法找到任何有關使用忽略變量的明確信息來消除不必要的計算。