2011-09-06 66 views

回答

2

您可以使用邏輯索引,假設你的載體是vnumel(v(v==1))返回您的載體等於1的元素個數。

同樣,如果您想檢查每個值是否相同,您可以使用:numel(unique(v)),它返回v唯一條目的數量。

+0

最準確的說,它應該是(numel(v(v == 1))== 1)來得到T/F。 – Marc

+2

使用numel(unique(v))來檢查每個條目是否相同可能會有點慢,因爲unique會進行排序。我認爲〜任何(v〜= v(1))應該快得多,特別是如果v有很多元素。 – MatlabSorter

1

稍微不同的解決方案:

v = [0 0 0 0 1 0 0 0 0]; 
TF = sum(v==1)==1   %# returns TRUE 

,如果你想將它應用到矩陣的所有行,這是特別有用:

M = [ 
    0 0 0 0 1 0 0 0 0 ; 
    0 0 0 0 0 0 0 0 1 ; 
    0 0 0 0 2 0 0 0 0 ; 
    0 0 1 0 1 0 0 0 0 
]; 
TF = sum(M==1,2)==1 

結果:

>> TF 
TF = 
    1 
    1 
    0 
    0 
+0

'2 2 2 1 2 2 2''或'0 0 0 1 0 2'怎麼樣?他們會是真的,對嗎?我認爲解決方案還應該檢查唯一值。雖然這可能不成問題的範圍。 – yuk

+0

你是對的,我們還應該檢查我們只處理零和除了前面的測試之外:'all(v == 0 | v == 1)'或'all(M == 0 | M == 1,2)'在矩陣的情況下 – Amro

0

通過從變量中提取所有獨特的元素可以實現僅零值檢查:

u = unique (v) 

然後,您可以將結果與零和瞧。

0

要檢查非零元素,請使用find函數。如果它只找到一個索引並且該條目是一個,那麼您的期望結果是真實的。否則它是錯誤的。

function bool = oneone(vector) 
    num = find(vector); 
    bool = isscalar(num) && vector(num)==1; 
end 

對於所有相同的條目,則diff函數計算後續元素的差。如果結果的any不爲零,則您的期望結果爲假。

function bool = allsame(vector) 
    d = diff(vector); 
    bool = ~any(d); 
end 
相關問題