考虑以下代码
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
返回一个空矩阵,有谁知道为什么会这样做?我怎样才能适应这两个条件?
答案 0 :(得分:6)
问题是因为在您的情况下,Ind2save
为空([]
),因此您的条件的第一部分无法与||
[] > 1
一起使用不会产生逻辑标量(导致[]
)。
为了解决这个问题,您可以翻转条件的顺序,以便检查数组是否为空首先。
if isempty(Ind2save) || Ind2save > 1
这样做的原因是,如果Ind2Save
为空,则第一个条件的计算结果为true
,从而使其余检查短路。
如果出于某种原因Ind2save
是向量,则可能还有其他问题。在这种情况下,您可能需要将其转换为逻辑标量:
if isempty(Ind2save) || ismember(1, Ind2save)