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

4

我有一些Matlab代码,在操作之前检查数组是否为非零,但即使数组是3乘以1000+,它也被跳过了。

代码只是:if X

该数组是使用“xlsread”从Excel文件中读取的,并且仅对特定数据文件给出错误,但对我使用的任何其他输入数据文件都有效。

有什么想法吗?

2个回答

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
使用 any(A(:)) 可以避免 b3 在他的回答中提到的问题。 - SCFrench
谢谢,问题已解决。我很惊讶那个漏洞需要这么长时间才出现。 - Matt

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接