Solve the Error “operands to the || and && operators must be convertible to logical scalar values”

MATLAB is a high-performance and paradigm programming language used for technical computing as well as two-way and flexible integration with various programming languages like Python, etc. With this, programmers can do matrix manipulation, data and functions, plotting, algorithm implementation, and user interface creation. When working with MATLAB, you may encounter “operands to the || and && operators must be convertible to logical scalar values”.

Have a look at how this error shows up

How the error occurs

When you are working on a Matlab project, you get the error warning. Check out the array of values you used or similar to this one:

a = floor(rand(5,5).*255)

Let’s say you have a threshold array having a similar size:

a_thresh = floor(rand(5,5).*255)

If the value of ‘a’ you want to have around 0.5x smaller as compared to the corresponding value in a_thresh, you would like to have a 0 output, which is a similar value 1.2 x in a_thresh that is also set to be 0. For instance:

a(a < a_thresh.*0.4) = 0
a(a > a_thresh.*1.2) = 0

If you want a proportional amount for a value between 0.4x, 0.5x. 1.0x and 1.2x or otherwise between 0.5 and 1.0 along with the ‘a’ value unaltered, you must have tried a script similar to this one:

a(a>= a_thresh .* 0.4 && a <a_thresh.* 0.5) = ((a - a_thresh.*0.4)/(a_thresh.*0.5 a_thresh.*0.4)) .* a;

As soon as you typed it, you end up with the following error warning:

Operands to || and && operations must be convertible to logical scalar values

Now that you have seen how you write the code that results in this error, let’s discuss how to fix it

Solutions To Fix the Error “operands to the || and && operators must be convertible to logical scalar values”

Solution 1

The second issue we have discussed above appears because the number of elements on the left is different from the elements on right. It happens as on left, indices (choosing just specific elements) are used, while on the right, the entire matrix ‘a’ and ‘a_thresh’ is what you are using. You are required to use indices on both right as well as on the left. It is recommended you should store it in a variable and later utilize it as a subscript of an array with the following:

idx = (a >= a_thresh*0.4 & a < a_thresh*0.5);
a(idx) = ((a(idx)-a_thresh(idx)*0.4) ./ (a_thresh(idx)*0.5*a_thresh(idx)*0.4)) .* a(idx);

It resolves the error. However, you need to check the calculation yourself to make sure the calculation is correct.

Solution 2

The && only operate on scalars and it is a fact. While & is known to work on arrays too. To resolve the error, you just need to replace && with &. This minor change works.

Conclusion

We highlighted the solutions to help you fix the error “operands to the || and && operators must be convertible to logical scalar values” with simple implementation. Both solutions are effective to remove the error.

I hope you find it helpful!

Leave a Reply

Your email address will not be published. Required fields are marked *