zu berechnen Ich habe einen Datenrahmen 'Daten' mit Millionen von Zeilen. Jede Zeile hat Koordinaten ('x', 'y'), ich möchte Abstände zwischen aufeinanderfolgenden Koordinatenpaaren auf die effizienteste Weise berechnen, die Python liefern kann. Wird die Parallelisierung hier helfen?Der schnellste Weg mit der Parallelisierung, um Abstände zwischen zwei Punkten mit Python-Code
Ich sah Ansätze hier, die Cython verwenden vorgeschlagen. Allerdings möchte ich nur Python-Lösungen sehen. Hier
ist das Snippet meiner Daten
points =
[(26406, -6869),
(27679, -221),
(27679, -221),
(26416, -6156),
(26679, -578),
(26679, -580),
(27813, -558),
(26254, -1097),
(26679, -580),
(27813, -558),
(28258, -893),
(26253, -1098),
(26678, -581),
(27811, -558),
(28259, -893),
(26252, -1098),
(27230, -481),
(26679, -582),
(27488, -5849),
(27811, -558),
(28259, -893),
(26250, -1099),
(27228, -481),
(26679, -582),
(27488, -5847),
(28525, -1465),
(27811, -558),
(28259, -892)]
Ich glaube, dass mein erster Ansatz für-Schleife kann auf jeden Fall verbessert werden:
from scipy.spatial import distance
def comp_dist(points):
size =len(points)
d = 0
i=1
for i in range(1,size):
if i%1000000==0:
print i
# print "i-1:", points[i-1]
# print "i: ", points[i]
dist = distance.euclidean(points[i-1],points[i])
d= d+dist
print d
distance = comp_dist(points)
Vielen Dank für Ihre Antworten im Voraus.
numpy Verwendung wäre schneller als die aktuelle Lösung, und viel einfacher zu implementieren als Cython. Es wird Ihnen jedoch keine Parallelisierung geben (aber es könnte zum Beispiel für Ihre CPU optimiert sein). – Evert
Wenn Sie die Multiprocessing-Route durchlaufen, müssen Sie Ihre große Liste in Stücke aufteilen, diese verarbeiten und dann am Ende zusammenführen – kezzos
Glauben Sie, dass es die Leistung verbessern wird? –