||在矩阵为空的情况下,运算符必须可转换为逻辑标量值

时间:2016-12-01 15:09:17

标签: matlab operators

考虑以下代码

t = ones(3,5)
Ind2save = find(t(1,:) == 0,1,'first')

所以例如我试图找到第一行的第一个零,所以如果第一个元素是非零那么

if(Ind2save ~= 1 )
    disp('no')
end

现在对于上述条件,它不会显示'no',因为条件未满足,但是因为所有行都已填充且Ind2save是一个空矩阵所以我们另一个条件来检查它是否完全填满那么

if(Ind2save > 1 || isempty(Ind2save))
    disp('no')
end

我收到以下错误

Operands to the || and && operators must be convertible to logical scalar values.

我搜索了导致此错误的原因,并且在大多数情况下,人们正在比较两个向量,因此更好的想法是将||替换为|但在我的情况下是条件永远不是向量,但是Ind2save > 1返回一个空矩阵,有谁知道为什么会这样做?我怎样才能适应这两个条件?

1 个答案:

答案 0 :(得分:6)

问题是因为在您的情况下,Ind2save为空([]),因此您的条件的第一部分无法与|| [] > 1一起使用不会产生逻辑标量(导致[])。

为了解决这个问题,您可以翻转条件的顺序,以便检查数组是否为空首先

if isempty(Ind2save) || Ind2save > 1

这样做的原因是,如果Ind2Save为空,则第一个条件的计算结果为true,从而使其余检查短路。

如果出于某种原因Ind2save是向量,则可能还有其他问题。在这种情况下,您可能需要将其转换为逻辑标量:

if isempty(Ind2save) || ismember(1, Ind2save)