我有一些Matlab代码,在运行之前检查一个数组是否为非零,即使数组是3乘1000,它也会被跳过 .
代码只是:如果是X.
使用'xlsread'从excel文件中读取数组,并且仅为特定数据文件提供错误,但适用于我使用的任何其他输入数据文件 .
知道为什么会这样吗?
它只需要一个数组的一个元素为零值,以使此测试失败
>> 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 关键字:
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) - 这已在上面的答案中进行了适当的编辑 .
any(A(:))
any(A)
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
2 回答
它只需要一个数组的一个元素为零值,以使此测试失败
如果're looking to check that the array doesn' t仅包含零,则可以使用
any
关键字:Edit:
正如SCFrench在评论中提到的那样道歉,使用
any(A(:))
来测试数组中的每个元素而不是any(A)
- 这已在上面的答案中进行了适当的编辑 .any函数不能完全解决此问题,因为它将矩阵的列视为向量:
而是使用nnz函数计算矩阵中非零元素的数量: