Как преобразовать операнды && в логический скаляр

После запуска кода в Matlab я сталкиваюсь с этой ошибкой и не знаю, как ее решить. Как я могу решить эту проблему.

Предупреждение:

Операнды || и операторы && должны преобразовываться в логические скалярные значения.

    Jgray = double(rgb2gray(J));
    % Calculate the Gradients
    [dIx, dIy] = gradient(Jgray);
    if max(dIx)<=103 && max(dIy)<=100
        B =  abs(dIy) - abs(dIx);
    else
        B = abs(dIx) - abs(dIy);
    end

person Kim    schedule 07.02.2012    source источник


Ответы (2)


Если dIx и dIy являются матрицами (в отличие от одномерных векторов), max(dIx) и max(dIy) вернут векторы.

&& и || следует использовать для сравнения скаляров, а не векторов.

Вы вероятно хотите ввести

if max(dIx(:))<=103 && max(dIy(:))<=100

но я не могу сказать наверняка, так как я не знаю, что должен делать код :)

person user1083059    schedule 07.02.2012

Используйте & и | для матриц вместо &&, || .

&& и || являются операторами короткого замыкания. Если подумать, для матриц они не имеют смысла. Например, короткое замыкание или - || останавливается и возвращает true всякий раз, когда первым аргументом является true.
Но как бы вы распространили это на матрицу?

person Andrey Rubshtein    schedule 07.02.2012