2013-03-19 76 views
3

在給定的數組中,我需要找到數組中最小值的索引,但只有當它是負數時才需要。Matlab,找到最小值的索引,並且必須是負的條件

例如:[1, 2, 3, 4]將返回沒有索引

[1, 4, -7, -2]將返回3

我在想,它必須與find()命令簡單,但我無法弄清楚如何使用它這個具體情況。

+0

我自己發現了,當我嘗試你的問題。 :D – 2013-03-19 04:47:39

回答

5

假設輸入矩陣是A,這應該做的伎倆:

find(A==min(A) & A<0) 

例如:

>> A = [1, 2, 3, 4]; 
>> B = [1, 4, -7, -2]; 
>> find(A==min(A) & A<0) 

ans = 

    Empty matrix: 1-by-0 

>> find(B==min(B) & B<0) 

ans = 

    3 
+0

這是一個很好的解決方案。 – Justin 2013-03-19 04:43:48

+0

我最初發布了一個函數,然後提出:find(cell2mat(arrayfun(@(x)eq(x,min(A(sign(A)== -1))),A,'UniformOutput',false )))'。大聲笑,有時你需要退後一步,並在開始編碼之前考慮事情... – Justin 2013-03-19 04:51:02

+0

@jucestain:是的。 :D它發生在我們最好的時候。 – 2013-03-19 04:54:43

3

有時,投擲一切到一個複雜的矢量表達不是最佳的。

在這種情況下,我希望避免呼叫find要快得多。

function [i] = most_negative_index(x) 
    [mn, i] = min(x); 
    if mn >= 0 
     i = []; 
    end 
end 
相關問題