On 03/25/2012 06:55 AM, Pierre Haessig wrote:
> Hi,
>
> I have an off topic but somehow related question :
>
> Le 19/03/2012 12:04, Matthieu Rigal a écrit :
>> array = numpy.logical_and(numpy.logical_and(aBlueChannel<  1.0, aNirChannel>
>> (aBlueChannel * 1.0)), aNirChannel<  (aBlueChannel * 1.8))
> Is there any significant difference between :
>
> z = np.logical_and(x,y) and
> z= x&  y (assuming x and y are already numpy arrays and not just list)
>
> I've always used the&  (and | and ~) operator because it's of course
> much shorter ;-)
>
> I've seen no mention of the "&" operator in np.logical_and docstring so
> I wonder...

There is a big difference: &, |, and ~ are bitwise operators, not 
logical operators, so they work like logical operators only if operating 
on booleans (or at least arrays containing nothing but integer zeros and 
ones) and only if you bear in mind that & and | have lower precedence 
than their logical counterparts.  Therefore you often need to use more 
parentheses than you might have expected.

In [1]: a = np.array([1])

In [2]: b = np.array([2])

In [5]: np.logical_and(a,b)
Out[5]: array([ True], dtype=bool)

In [6]: a & b
Out[6]: array([0])


Using the bitwise operators in place of logical operators is a hack to 
get around limitations of the language; but, if done carefully, it is a 
useful one.

Eric

>
> Best,
> Pierre
>
>
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to