def neighbors(arr, x, y, n=3):
    """ Given a 2D-array, returns an nxn array whose "center" element is arr[x,y]"""
arr = np.roll(np.roll(arr, shift=-x + 1, axis=0), shift=-y + 1, axis=1)
Как выбрать окно из массива numpy с периодическими граничными условиями?