|| usage in Matlab

Go To StackoverFlow.com

0

I am writing an easy IF condition. The function is to judge each row of the matrix to be certain vectors. The code is as follows:

  if (compareM(i,:)==[1, 0])||(compareM(i,:) ==[2, 1])
      match_1 = match_1 +1;
  else
      mismatch_1 = mismatch_1 +1;
  end

The error said ''Operands to the || and && operators must be convertible to logical scalar values''.

compareM is a n by 2 matrix and I wonder if the error is made by || operation. Thanks in advance!

2012-04-04 21:06
by AnneS


1

If you are comparing vectors, not scalar values, you have to use | operator. As a result you get logical vector of element-by-element pairwise comparison. To use it in IF statement you have to convert either each logical statement (then use ||) or the result of | the to scalar with ALL, ANY or other function.

If you want to compare to vectors for equality use ISEQUAL function as

if isequal(compareM(i,:)==[1, 0]) || isequal(compareM(i,:)==[2, 1])
2012-04-04 21:15
by yuk
Believe this should read if isequal(compareM(i,:), [1,0]); right now you have a combination of the corrected version and the original - bnaul 2012-04-04 21:17
Just a typo. Thanks - yuk 2012-04-04 21:18
@yuk Yes! Thank you . For vectors, it's different - AnneS 2012-04-04 21:28


1

compareM(i, :) evaluates to a 1x2 numeric array, so compareM(i,:)==[1, 0] evaluates to a 1x2 logical array. The same for the expression to the right of the || sign. But you need a single logical value on each side of ||, not a 1x2 array of logical values.

If you want this expression to evaluate to true if both values on the lhs of == are the same as the corresponding elements on the rhs, wrap all() around each side:

all(compareM(i,:)==[1, 0]) || all(compareM(i,:) ==[2, 1])
2012-04-04 21:11
by jmhl


0

if ((compareM(i,:)==[1, 0])||(compareM(i,:) ==[2, 1]))
    match_1 = match_1 +1;
else
    mismatch_1 = mismatch_1 +1;
end

Note the outer enclosing parentheses.

2012-04-04 21:09
by eqb
It still doesn't work. THe same error occurs - AnneS 2012-04-04 21:13
Ads