I have a question which is similar to the one asked here: How to apply a disc shaped mask to a numpy array?. However, instead of masking a single circular sector, I would like to create a mask with multiple circular sectors (number is variable). These masks all have the same radius, but different centers. The coordinates of these centers are stored in a numpy 2d array. For example:
maskcenters = array([[1, 1],
[7, 2],
[2, 8]])
import numpy as np
a, b = maskcenters[0]
n = 10
r = 2
y,x = np.ogrid[a:na, b:nb]
mask = x*x + y*y <= r*r
#output
array([[ True, True, True, False, False, False, False, False, False],
[ True, True, True, True, False, False, False, False, False],
[ True, True, True, False, False, False, False, False, False],
[False, True, False, False, False, False, False, False, False],
[False, False, False, False, False, False, False, False, False],
[False, False, False, False, False, False, False, False, False],
[False, False, False, False, False, False, False, False, False],
[False, False, False, False, False, False, False, False, False],
[False, False, False, False, False, False, False, False, False]], dtype=bool)
#output
array([[ True, True, True, False, False, False, False, False, True],
[ True, True, True, True, False, False, False, True, True],
[ True, True, True, False, False, False, True, True, True],
[False, True, False, False, False, False, False, True, True],
[False, False, False, False, False, False, False, False, True],
[False, False, True, False, False, False, False, False, False],
[False, True, True, True, False, False, False, False, False],
[ True, True, True, True, True, False, False, False, False],
[False, True, True, True, False, False, False, False, False]], dtype=bool)
You can use scipy's binary_dilation
with a disk shaped kernel, like so 
# Define inputs
maskcenters = np.array([
[1, 1],
[7, 2],
[2, 8]])
out_shp = (10,10) # Output array shape
r = 2 # Radius of circles
# Get a disk kernel
X,Y = [np.arange(r,r+1)]*2
disk_mask = X[:,None]**2 + Y**2 <= r*r
# Initialize output array and set the maskcenters as 1s
out = np.zeros(out_shp,dtype=bool)
out[maskcenters[:,0],maskcenters[:,1]] = 1
# Use binary dilation to get the desired output
out = binary_dilation(out,disk_mask)
Output 
In [64]: print out
[[ True True True False False False False False True False]
[ True True True True False False False True True True]
[ True True True False False False True True True True]
[False True False False False False False True True True]
[False False False False False False False False True False]
[False False True False False False False False False False]
[False True True True False False False False False False]
[ True True True True True False False False False False]
[False True True True False False False False False False]
[False False True False False False False False False False]]
Here's another approach using simple indexing

X,Y = [np.arange(r,r+1)]*2
disk_mask = X[:,None]**2 + Y**2 <= r*r
Ridx,Cidx = np.where(disk_mask)
out = np.zeros(out_shp,dtype=bool)
absidxR = maskcenters[:,None,0] + Ridxr
absidxC = maskcenters[:,None,1] + Cidxr
valid_mask = (absidxR >=0) & (absidxR <out_shp[0]) & \
(absidxC >=0) & (absidxC <out_shp[1])
out[absidxR[valid_mask],absidxC[valid_mask]] = 1