请考虑以下代码
t = ones(3,5)
Ind2save = find(t(1,:) == 0,1,'first')
Run Code Online (Sandbox Code Playgroud)
所以例如我试图找到第一行的第一个零,所以如果第一个元素是非零那么
if(Ind2save ~= 1 )
disp('no')
end
Run Code Online (Sandbox Code Playgroud)
现在对于上述条件,它不显示'no',因为条件没有满足,但因为所有的行都被填充并且Ind2save是一个空矩阵所以我们另一个条件来检查它是否完全填充然后
if(Ind2save > 1 || isempty(Ind2save))
disp('no')
end
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Operands to the || and && operators must be convertible to logical scalar values.
Run Code Online (Sandbox Code Playgroud)
我搜索了由于这个错误导致的原因,并且在大多数情况下人们正在比较两个向量,所以更好的想法是替换||为|但在我的情况下条件永远不是向量但Ind2save > 1返回空矩阵,有没有人知道为什么是这样的原因?我怎样才能适应这两个条件?
问题是因为在你的情况下Ind2save是空的([])因此你的条件的第一部分不能使用,||因为[] > 1不会产生逻辑标量(它导致[]).
为了解决这个问题,你可以翻转你的条件,你检查,如果数组是空的顺序第一.
if isempty(Ind2save) || Ind2save > 1
Run Code Online (Sandbox Code Playgroud)
这样做的原因是如果Ind2Save为空,则第一个条件评估为true因此使其余检查短路.
如果由于某种原因Ind2save是矢量,您可能还有其他问题.在这种情况下,您可能需要将其转换为逻辑标量:
if isempty(Ind2save) || ismember(1, Ind2save)
Run Code Online (Sandbox Code Playgroud)