# Indexing NumPy arrays with Booleans

Boolean indexing is a kind of fancy indexing therefor it works pretty much the same.

``````import scipy.misc
import matplotlib.pyplot as plt
import numpy as np

face = scipy.misc.face()
xmax = face.shape
ymax = face.shape
face = face[:min(xmax,ymax),:min(xmax,ymax)]

def get_indices(size):
arr = np.arange(size)
return arr % 4 == 0

face1 = face.copy()
xindices = get_indices(face.shape)
yindices = get_indices(face.shape)
face1[xindices, yindices] = 0
plt.subplot(211)
plt.imshow(face1)
face2 = face.copy()
face2[(face > face.max()/4) & (face < 3 * face.max()/4)] = 0
plt.subplot(212)
plt.imshow(face2)
plt.show()

#out ``````

Explanation:

• Image with dots on the diagonal – We choose modulo 4 points on the diagonal of the picture (not sure if it can be seen in the image above):
``````def get_indices(size):
arr = np.arange(size)
return arr % 4 == 0``````
• We use this selection and plot the points:
``````face1 = face.copy()
xindices = get_indices(face.shape)
yindices = get_indices(face.shape)
face1[xindices, yindices] = 0
plt.subplot(211)
plt.imshow(face1)``````
• Set to 0 based on value – Select array values between one quarter and three quarters of the maximum value and set them to 0:
``face2[(face > face.max()/4) & (face < 3 * face.max()/4)] = 0``