El problema consiste en modelar la propagación de una señal (por ejemplo, luz o sonido, etc.) a través de una serie de obstáculos, como en la figura a continuación. La señal no puede pasar a través de la superficie inferior (terreno), pero puede atravesar obstáculos. Quiero contar la cantidad de obstáculos atravesados.
El terreno y los obstáculos están en matrices numpy 2D (x, y, z). Esto es lo que hago:
output = numpy.zeros(terrain.shape)
obstacles = terrain + obstacle_heights
for i in xrange (obstacles.shape[0]):
for j in xrange (obstacles.shape[1]):
mask = obstacles[i,j] > terrain[i,j:]
output[i,j:][mask] +=1
El resultado sería algo así [0, 0, 0, 1, 1, 1, 2, 3, 4, 4, 4 ...]
por fila.
Este método funciona bien (siempre que los valles del terreno se llenen usando numpy.maximum.accumulate
). Ahora, ¿sería posible acelerar la cosa usando una solución vectorizada?