N = 10
row, col = 8, 7
radius = 4
rows = np.arange(N) - row
rows = np.minimum(np.abs(rows), rows % N)
cols = np.arange(N) - col
cols = np.minimum(np.abs(cols), cols % N)
(rows[:, (None)] ** 2 + cols ** 2 <= radius ** 2).astype(int)
Применение круговой маски с периодическими граничными условиями в питоне