2010-11-04 60 views
4

我有一些Matlab代碼,用於在運行前檢查數組是否爲非零,即使數組是3以1000+也會被跳過。爲什麼完整的Matlab數組(X)在'if X'中返回false?

的代碼僅僅是:如果X

陣列被從Excel文件中使用「xlsread」讀取和只給出了誤差的特定數據文件,但適用於我使用任何其他的輸入數據文件。

任何想法,爲什麼這是?

回答

3

只需要一個數組的一個元素是零值的測試失敗

>> A = rand(100, 3) + 1; 
>> if A; disp('True'); else disp('False'); end 
True  

>> A(35) = 0; 
>> if A; disp('True'); else disp('False'); end 
False 

如果你正在尋找檢查數組不僅包含零,您可以使用any關鍵字:

>> A = rand(100, 3) + 1; 
>> A(35) = 0; 
>> if any(A(:)); disp('True'); else disp('False'); end 
True 

>> A = 0 * A; 
>> if any(A(:)); disp('True'); else disp('False'); end 
False 

編輯:

道歉,因爲SCFrench在評論中提到,使用any(A(:))來測試數組中的每個元素而不是any(A) - 這已在上面的答案中正確編輯。

+1

使用任何(A(:))來避免b3在他的答案中提到的問題。 – SCFrench 2010-11-05 01:10:57

+0

謝謝,修復它。我很驚訝,這個bug花了很長時間纔出現。 – Matt 2010-11-06 01:14:29

0

any功能確實爲這個問題不太工作,因爲它把一個矩陣的列作爲一個向量:

>> any([0 0 1; 0 0 1; 0 0 1]) 
ans = 
    0  0  1 

而是使用nnz函數來計算一個非零元素的數量矩陣:

>> nnz([0 0 1; 0 0 1; 0 0 1]) 
ans = 
    3 
>> nnz([0 0 0; 0 0 0; 0 0 0]) 
ans = 
    0 
相關問題