Das Problem besteht darin, die Ausbreitung eines Signals (z. B. Licht oder Ton usw.) durch eine Reihe von Hindernissen zu modellieren, wie in der folgenden Abbildung dargestellt. Das Signal kann nicht durch die Bodenfläche (Gelände) geleitet werden, es kann jedoch Hindernisse überwinden. Ich möchte die Anzahl der durchquerten Hindernisse zählen.
Gelände und Hindernisse befinden sich in 2D-Numpy-Arrays (x, y, z). Das ist was ich mache:
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
Das Ergebnis wäre so etwas wie [0, 0, 0, 1, 1, 1, 2, 3, 4, 4, 4 ...]
pro Zeile.
Diese Methode funktioniert einwandfrei (vorausgesetzt, die Täler im Gelände werden mit verwendet numpy.maximum.accumulate
). Wäre es nun möglich, die Sache mit einer vektorisierten Lösung zu beschleunigen?