首页 文章

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

提问于
浏览
4

我有一些Matlab代码,在运行之前检查一个数组是否为非零,即使数组是3乘1000,它也会被跳过 .

代码只是:如果是X.

使用'xlsread'从excel文件中读取数组,并且仅为特定数据文件提供错误,但适用于我使用的任何其他输入数据文件 .

知道为什么会这样吗?

2 回答

  • 0

    它只需要一个数组的一个元素为零值,以使此测试失败

    >> 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
    

    如果're looking to check that the array doesn' t仅包含零,则可以使用 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
    

    Edit:

    正如SCFrench在评论中提到的那样道歉,使用 any(A(:)) 来测试数组中的每个元素而不是 any(A) - 这已在上面的答案中进行了适当的编辑 .

  • 3

    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
    

相关问题