Numpy: asignación de valores a una matriz 2D con una lista de índices

Tengo 2d numpy array (piense en una imagen en escala de grises). Quiero asignar cierto valor a una lista de coordenadas para esta matriz, de modo que:

img = np.zeros((5, 5))
coords = np.array([[0, 1], [1, 2], [2, 3], [3, 4]]) 

def bad_use_of_numpy(img, coords):
    for i, coord in enumerate(coords):
        img[coord[0], coord[1]] = 255

    return img

bad_use_of_numpy(img, coords)

Esto funciona, pero siento que puedo aprovechar la funcionalidad de numpy para hacerlo más rápido. También podría tener un caso de uso más adelante para algo como lo siguiente:

img = np.zeros((5, 5))
coords = np.array([[0, 1], [1, 2], [2, 3], [3, 4]])
vals = np.array([1, 2, 3, 4])

def bad_use_of_numpy(img, coords, vals):
    for coord in coords:
        img[coord[0], coord[1]] = vals[i]

    return img

 bad_use_of_numpy(img, coords, vals)

¿Hay una forma más vectorizada de hacer eso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta