2016-12-01 49 views
2

考慮下面的代碼||運營商必須轉換爲邏輯標值在一個空矩陣

t = ones(3,5) 
Ind2save = find(t(1,:) == 0,1,'first') 

因此,例如,我想找到的情況下,如果連第一排的第一個零,因此,如果第一個元素是一個非零然後

if(Ind2save ~= 1) 
    disp('no') 
end 
現在

對於上述條件不顯示「不」,因爲條件不滿足,而是因爲所有的行被填充Ind2save是一個空矩陣,所以我們另一個條件檢查如果它完全填充,則

if(Ind2save > 1 || isempty(Ind2save)) 
    disp('no') 
end 

我收到以下錯誤

Operands to the || and && operators must be convertible to logical scalar values. 

我搜索了這個錯誤造成的,由於它的原因,在大多數人都比較兩個向量的情況下,這樣一個更好的想法是,以取代|||但在我的情況下,條件是從來沒有矢量,但Ind2save > 1返回一個空矩陣,有誰知道爲什麼是這樣的原因?我怎樣才能適應這兩種條件?

回答

6

的問題是,因爲你的情況Ind2save是空的([]),因此你的病情的第一部分不能與||因爲[] > 1使用不會產生一個邏輯標量(它導致[])。

爲了解決這個問題,您可以翻轉條件順序,以便檢查數組是否爲空第一個

if isempty(Ind2save) || Ind2save > 1 

,這種工作的原因是,如果Ind2Save爲空,則所述第一條件的計算結果爲true因此短路檢查的其餘部分。

如果出於某種原因,您可能還有其他問題Ind2save是一個向量。在這種情況下,您可能需要將某些東西轉換爲邏輯標量:

if isempty(Ind2save) || ismember(1, Ind2save)