You cannot use and
, or
, and not
on Boolean arrays. Indeed, those operators force the casting from array to Boolean, which is not permitted. Instead, we can use the operators given in the following table (Table 5.1) for componentwise logical operations on Boolean arrays:
Logic operator
|
Replacement for Boolean arrays
|
|
|
|
|
|
|
Table 5.1 Logical operators and, or and not do not work with arrays.
A = array([True, True, False, False]) B = array([True, False, True, False]) A and B # error! A & B # array([True, False, False, False]) A | B # array([True, True, True, False]) ~A # array([False, False, True, True])
Here is an example usage of logical operators with Boolean arrays:
Suppose that we have a sequence of data that is marred with some measurement error. Suppose further that we run a regression and it gives us a deviation for each value. We wish to obtain all the exceptional values and all the values with little deviation that are lower than a given threshold:
data = linspace(1,100,100) # data deviation = random.normal(size=100) # the deviations #don't forget the parentheses in next statement! exceptional = data[(deviation<-0.5)|(deviation>0.5)] exceptional = data[abs(deviation)>0.5] # same result small = data[(abs(deviation)<0.1)&(data<5.)] # small deviation and data
3.138.120.136