Elementos cambiantes en una matriz de Numpy

Estoy tratando de implementar una función que desplazará un elemento particular en una matriz 2d numpy un número deseado de espacios en una dirección determinada. Los espacios vacíos deben llenarse con ceros. Esta función tomará como entrada una matriz numpy, las coordenadas xey, la dirección deseada y el número de espacios para desplazarse.

Por ejemplo, donde shift es la función hipotética:

arr = np.array([1, 1, 1], [1, 1, 1], [1, 1, 1])
arr out: [[1, 1, 1],
          [1, 1, 1],
          [1, 1, 0]]

shift(arr, 0, 0, 'right', 2)
arr out: [[0, 0, 1],
          [1, 1, 1],
          [1, 1, 0]]

shift(arr, 0, 2, 'down', 1)
arr out: [[0, 0, 0],
          [1, 1, 1],
          [1, 1, 1]]

He descubierto que puedo lograr el desplazamiento deseado de todos los elementos de una fila o columna a lo largo de esa fila o columna con la función de numpy roll. Sin embargo, este enfoque simplemente alterna los elementos al principio de la misma fila o columna y no llena los espacios vacíos con ceros. Por ejemplo:

arr[:, 0] = np.roll(arr[:, 0], 1)
arr out: [[1, 0, 0],
          [0, 1, 1],
          [1, 1, 1]]

Cualquier ayuda es muy apreciada.

editar: Las coordenadas xey son las coordenadas del elemento que se desplazará dentro de la matriz 2D. El resto de los elementos dentro de la misma fila o columna se desplazan con respecto a ese elemento en la dirección deseada. Por ejemplo shift (arr, 2, 2, 'down', 1) desplaza los elementos en la columna con respecto al elemento en (2, 2) hacia abajo en 1. Se puede suponer que todos los valores de entrada son válidos en todo momento.

editar: Este problema difiere del vinculado en que los elementos se desplazan con respecto al elemento en las coordenadas proporcionadas, y este desplazamiento se produce en una matriz anidada. Además, esta solución no permite el desplazamiento de elementos hacia arriba o hacia abajo dentro de la misma columna.

Respuestas a la pregunta(2)

Su respuesta a la pregunta