为什么一个完整的Matlab数组(X)在'if X'中返回false?

我有一些Matlab代码,检查数组是否在操作之前是非零的,即使数组是3的1000+,也会被跳过。

代码只是:如果X

该数组是使用'xlsread'从Excel文件中读取的,只给出特定数据文件的错误,但是适用于我使用的任何其他input数据文件。

任何想法,为什么这是?

只有一个数组中的一个元素是零值才能使这个testing失败

>> 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(:))来testing数组中的每个元素而不是any(A) – 这已经在我上面的答案中正确编辑。

任何函数都不适合这个问题,因为它将matrix的列视为向量:

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

相反,使用nnz函数来计算matrix中非零元素的个数:

 >> nnz([0 0 1; 0 0 1; 0 0 1]) ans = 3 >> nnz([0 0 0; 0 0 0; 0 0 0]) ans = 0