2017-03-02 27 views
4

Matlab爲某個例程的輸出參數列表中的~字符引入,以表明我們對此輸出值不感興趣。例如:檢測是否有一些輸出參數未被使用

% Only interested for max position, not max value 
[~, idx] = max(rand(1, 10)); 

對於速度優化的原因,是否有可能從一些例程內部檢測到某些輸出參數未被使用?例如:

function [y, z] = myroutine(x) 
%[ 
    if (argout(1).NotUsed) 
     % Do not compute y output it is useless 
     y = []; 
    else 
     % Ok take time to compute y 
     y = timeConsummingComputations(x); 
    end 

    ... 
%] 

回答

2

它可能不是最好的一個,但一個簡單的解決辦法是增加另一個輸入參數

function [y, z] = myroutine(x, doYouWantY) 
%[ 
    if doYouWantY == 0 
     % Do not compute y output it is useless 
     y = []; 
    else 
     % Ok take time to compute y 
     y = timeConsummingComputations(x); 
    end 

    ... 
%] 
+0

是的,我也這麼認爲,這就是我迄今爲止所實施的內容。將有一段時間來看看是否有一個命令在驗證您的答案之前在引擎蓋下。 – CitizenInsane

0

nargout方法,編輯爲第二輸出。雖然不是非常穩定的解決方案,但是每當您使用一個輸出參數調用函數時,您需要知道輸出僅爲第二個參數。

 function [y, z] = myroutine(x) 
    %[ 
    if nargout==1 
     % Do not compute y output it is useless 
     y = []; 
    else 
     % Ok take time to compute y 
     y = timeConsummingComputations(x); 
    end 

    %] 
+0

在這裏,我感興趣的是能夠跳過計算的第一個參數,而不是第二(我不能重新排序輸出,需要保留調用語法) – CitizenInsane

+0

(1)它也可以工作,只需將'if'放在第一個參數而不是第二個參數周圍。 (2)你能輸入另一個類嗎?所以如果通常它是一個標量,輸入一個字符串,並檢查'isstring',例如。 (3)增加了一個額外的輸入參數,這個輸入參數是true或false,取決於你是否要計算那部分代碼。 – 2017-03-02 18:09:02

相關問題