One way could be to create a mask of the required size in the center of the array, and then use it np.rollto move the mask along the axis (this causes the mask to wrap around the edges of the array).
Following the method in the related question and answer:
ones = np.ones((8, 8))
a, b = 3, 3
n = 8
r = 3
mask = x**2 + y**2 <= r**2
mask :
array([[False, False, False, True, False, False, False, False],
[False, True, True, True, True, True, False, False],
[False, True, True, True, True, True, False, False],
[ True, True, True, True, True, True, True, False],
[False, True, True, True, True, True, False, False],
[False, True, True, True, True, True, False, False],
[False, False, False, True, False, False, False, False],
[False, False, False, False, False, False, False, False]], dtype=bool)
mask ones...
>>> rolled_mask = np.roll(np.roll(mask, -2, axis=0), -2, axis=1)
>>> ones[rolled_mask] = 255
>>> ones
array([[ 255., 255., 255., 255., 1., 1., 1., 255.],
[ 255., 255., 255., 255., 255., 1., 255., 255.],
[ 255., 255., 255., 255., 1., 1., 1., 255.],
[ 255., 255., 255., 255., 1., 1., 1., 255.],
[ 1., 255., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 255., 1., 1., 1., 1., 1., 1.],
[ 255., 255., 255., 255., 1., 1., 1., 255.]])