2016-12-01 22 views
2

Рассмотрим следующий код|| операторы должны быть конвертированы в логические скалярные значения в случае пустого матрицы

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

Так, например, я пытаюсь найти, если даже первый нуль первого ряда, так что, если первый элемент является отличным от нуля, то

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

теперь для приведенного выше условия не показывать «нет», потому что условие не выполняется, а потому, что все строки заполнены и Ind2save пустая матрица, поэтому мы еще одно условие, чтобы проверить если он полностью заполнен, то

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

Я получаю следующую ошибку

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

Я искал причин, по которым вызывается эта ошибка и в большинстве случаев люди, сравнивающих два вектора так, лучше было заменить || с |, но в моем случае условия никогда не являются векторами, но Ind2save > 1 возвращает пустую матрицу, кто-нибудь знает, почему причина этого? Как я могу приспособить оба условия?

ответ

6

Проблема в том, что в вашем случае Ind2save пуст ([]) поэтому первая часть вашего состояния не может быть использована с || поскольку [] > 1 не дает логическое скаляр (это приводит к []).

Чтобы исправить это, вы можете перевернуть порядок своих условий, чтобы вы проверяли, нет ли массива сначала.

if isempty(Ind2save) || Ind2save > 1 

Причина, по которой это работает в том, что если Ind2Save пусто, то первое условие принимает значение true поэтому короткое замыкание остальных проверок.

Возможно, возникли другие проблемы, если по какой-либо причине Ind2save - это вектор. В этом случае вам может понадобиться нечто, чтобы преобразовать его в логический скаляр:

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