Betrachten Sie den folgenden Code numpy Arrays, die sehr langsam ist:Beschleunigen Sie eine anzahlmäßige Schleife in Python?
# Intersection of an octree and a trajectory
def intersection(octree, trajectory):
# Initialize numpy arrays
ox = octree.get("x")
oy = octree.get("y")
oz = octree.get("z")
oe = octree.get("extent")/2
tx = trajectory.get("x")
ty = trajectory.get("y")
tz = trajectory.get("z")
result = np.zeros(np.size(ox))
# Loop over elements
for i in range(0, np.size(tx)):
for j in range(0, np.size(ox)):
if (tx[i] > ox[j]-oe[j] and
tx[i] < ox[j]+oe[j] and
ty[i] > oy[j]-oe[j] and
ty[i] < oy[j]+oe[j] and
tz[i] > oz[j]-oe[j] and
tz[i] < oz[j]+oe[j]):
result[j] += 1
# Finalize
return result
So wird die Funktion neu zu schreiben, die Berechnung zu beschleunigen? (np.size(tx) == 10000
und np.size(ox) == 100000
)
Ziehen Sie auch die Verwendung von OpenCL in Betracht? –
Ich brauche keine volle Leistung, ich will nur eine rohe Geschwindigkeit. – Vincent
Erstellen Sie einen 'scipy.spatial.KDTree' aus den Punkten tx, ty, tz und verwenden Sie dann die Suche nach dem nächsten Nachbarn in der Unendlichkeitsnorm für jeden Punkt in ox, oy, oz, um festzustellen, ob ein Punkt nahe genug ist. –