Le problème consiste à modéliser la propagation d'un signal (par exemple lumière ou son, etc.) à travers une série d'obstacles, comme sur la figure ci-dessous. Le signal ne peut pas traverser la surface inférieure (terrain), mais il peut traverser des obstacles. Je veux compter le nombre d'obstacles traversés.
Le terrain et les obstacles sont dans des tableaux numpy 2D (x, y, z). C'est ce que je fais:
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
Le résultat serait quelque chose comme [0, 0, 0, 1, 1, 1, 2, 3, 4, 4, 4 ...]
par ligne.
Cette méthode fonctionne bien (à condition que les vallées sur le terrain soient remplies en utilisant numpy.maximum.accumulate
). Maintenant, serait-il possible d'accélérer la chose en utilisant une solution vectorisée?