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

Nov*_*per 2 matlab operators

请考虑以下代码

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返回空矩阵,有没有人知道为什么是这样的原因?我怎样才能适应这两个条件?

Sue*_*ver 6

问题是因为在你的情况下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)