Euklidische Distanz

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
laura0704
User
Beiträge: 5
Registriert: Samstag 11. September 2021, 18:58

Hallo zusammen!

Ich haben einen Dataframe, der wie folgt aufgebaut ist

Timestamp ID X Y
0 0 100 1.728 14.378
1 12 100 2.035 14.378
2 24 100 2.342 14.378
3 36 100 2.630 14.378
4 48 100 2.937 14.416

Die erste Spalte beschreibt die von Pandas hinzugefügte Nummerierung (irrelevant), die zweite den Timestamp zu der die Koordinate bestimmt wurde, der dritte die dem Objekt zugeordnete ID und die letzten beiden die jeweils gemessene X bzw Y Koordinate. Eine fünfte Spalte wurde noch als "Kennziffer" hinzugefügt und beinhaltet eine Ziffer für die jeweils 20 zueinandergehörigen Koordinatenpunkte (20 Punkte bilden die Trajektorie eines Objekts, daher immer 20er Blöcke)

Nun zu meiner Frage: Wie berechne ich jeweils die zurückgelegte Distanz zwischen zwei Messungen, also den Vektor zwischen (Bsp von oben Zeile 1 und 2) (1.728/14.378) und (2.035/14.378)? Insgesamt habe ich über 100.000 Zeilen zwischen denen ich jeweils den Abstand berechnen und am besten als weitere Spalte einfügen muss
Geschieht dies am besten mit einer Schleife? Ich komme leider absolut nicht weiter, auch durch logisches Denken nicht, vielleicht kann hier ja jemand helfen - vielen Dank! :) :geek:
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

Hallo Laura0704

wenn Du Pandas nutzt, ist eine Schleife der falsche Ansatz.
Wie sieht denn Dein Code dazu bisher aus?
laura0704
User
Beiträge: 5
Registriert: Samstag 11. September 2021, 18:58

Hallo!

Bezüglich der Euklidischen Distanz habe ich noch keinen Code, musste mich in die Aufgabe erstmal eindenken :idea: Aber ja Pandas benutze ich dafür, der Code davor bezieht sich auf das hinzufügen der Spalte mit den Kennziffern für die jeweiligen ID 20er Blöcke, da sieht das snippet so aus:


df_sorted['Kennziffer'] = (numpy.arange(len(df_sorted)) / 20).astype(int)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@laura0704: Differenz bilden, Quadrieren, Summieren, alles Standardoperationen auf einem Dataframe. Hast Du denn schon das Pandas-Tutorial durchgearbeitet?
laura0704
User
Beiträge: 5
Registriert: Samstag 11. September 2021, 18:58

Ja, die mathematische Grundlage bzw. das theoretische Vorgehen ist nicht das Problem, eher das Durchlaufen aller Zeilen und dann das einschreiben des Ergebnisses in eine Liste bzw das Anhängen dieser Liste an den vorhandenen Dataframe
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst keine Zeilen durchlaufen. Sondern einfach nur die Operationen auf dem Frame bzw. den Spalten durchführen. Der erledigt dann die iteration transparent für dich.

https://jakevdp.github.io/PythonDataSci ... andas.html
laura0704
User
Beiträge: 5
Registriert: Samstag 11. September 2021, 18:58

Dann ändert sich doch aber der Wert der Spalten oder? Ich müsste ja eine neue Spalte anhängen, habe versucht die Werte in einer leeren Liste zu speichern und diese mit append anzuhängen, das klappt aber nicht
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nö. Du kannst auch einen neuen Frame erzeugen lassen.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@lauro0704: ich weiß nicht, ob __deets__ Tutorial bei Deinem Problem direkt hilft, da Du keine numpy-Funktionen direkt brauchst.

Aber wie ich schon geschrieben hatte, solltest Du dringend (nochmal) das Tutorial durcharbeiten, wenn Dir so grundlegende Dinge wie anhängen einer Spalte fehlen: https://pandas.pydata.org/pandas-docs/v ... 05-columns
Antworten