我有一些Matlab代碼,用於在運行前檢查數組是否爲非零,即使數組是3以1000+也會被跳過。爲什麼完整的Matlab數組(X)在'if X'中返回false?
的代碼僅僅是:如果X
陣列被從Excel文件中使用「xlsread」讀取和只給出了誤差的特定數據文件,但適用於我使用任何其他的輸入數據文件。
任何想法,爲什麼這是?
我有一些Matlab代碼,用於在運行前檢查數組是否爲非零,即使數組是3以1000+也會被跳過。爲什麼完整的Matlab數組(X)在'if X'中返回false?
的代碼僅僅是:如果X
陣列被從Excel文件中使用「xlsread」讀取和只給出了誤差的特定數據文件,但適用於我使用任何其他的輸入數據文件。
任何想法,爲什麼這是?
只需要一個數組的一個元素是零值的測試失敗
>> 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)
- 這已在上面的答案中正確編輯。
使用任何(A(:))來避免b3在他的答案中提到的問題。 – SCFrench 2010-11-05 01:10:57
謝謝,修復它。我很驚訝,這個bug花了很長時間纔出現。 – Matt 2010-11-06 01:14:29