考虑以下代码

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.

我搜索了导致此错误的原因,并且在大多数情况下,人们在比较两个 vector ,因此更好的主意是将||替换为|,但在我的情况下,条件永远不是 vector ,但Ind2save > 1返回一个空矩阵,有人知道为什么吗?如何满足这两个条件?

最佳答案

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

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

if isempty(Ind2save) || Ind2save > 1

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

如果出于某些原因Ind2save是 vector ,您可能还有其他问题。在这种情况下,您可能需要执行一些操作以将其转换为逻辑标量:
if isempty(Ind2save) || ismember(1, Ind2save)

08-20 02:00