[PYTHON] Überprüfen Sie, ob für die 3D-Koordinatendatengruppe "fast übereinstimmende" Punkte vorhanden sind.

Einführung

Auf der Suche nach einem besseren Weg werde ich es vorerst so zusammenfassen. ** (Wenn Sie einen besseren Weg kennen, lassen Sie es mich bitte wissen !!) **

Was du machen willst

① Grundlegend Wie in der folgenden Abbildung gezeigt, gibt es Excel, in dem dreidimensionale Koordinatenpunkte gespeichert sind, und ich möchte Zahlen mit denselben Koordinaten verknüpfen. Im folgenden Beispiel sind die Koordinaten von S / N-2 und die Koordinaten von S / N-3 (hellblau hervorgehoben) genau gleich, sodass sie als "gleiche Koordinaten!" Beurteilt werden.

② Anwendung Als Spezifikation des Ziels, an dem ich gerade arbeite, ist es schwierig, dass die Koordinaten genau übereinstimmen. Daher möchte ich beurteilen, dass sie mit einer bestimmten Marge übereinstimmen. Zum Beispiel sind die Koordinaten von S / N-8 und die Koordinaten von S / N-9 (gelb hervorgehoben) ** fast ** gleich, also beurteilen Sie bitte, dass sie auch "gleiche Koordinaten" sind.

image.png

Diesmal fiel mir keine weitere gute Idee für diese "Anwendung" ein. .. Wenn Sie nur die genaue Übereinstimmung extrahieren möchten, sollten Sie die X-Koordinate, die Y-Koordinate und die Z-Koordinate als Zeichenfolge kombinieren und beurteilen, ob sie übereinstimmen.

Der resultierende Code sieht so aus

Erstellen Sie zunächst eine Funktion, die einschließlich des Randes beurteilt werden kann. In den folgenden Fällen wird der Fehler ± 100 ignoriert und True wird zurückgegeben, wenn die drei Koordinaten einschließlich des Randes übereinstimmen.


def coordinates_check(ax,ay,az,bx,by,bz):
    margin=100
    flag = 0
    result=False
    
    if ax-margin < bx < ax+margin:
        flag = flag +1
    if ay-margin < by < ay+margin:
        flag = flag +1
    if az-margin < bz < az+margin:
        flag = flag +1
        
    if flag >2:
        result = True

    return result

Verwenden Sie diese Funktion, um die Zeilen der Excel-Datei von oben zu lesen. Die Startnummer der zweiten for-Anweisung ist so festgelegt, dass die Messwerte nicht dupliziert werden.

df_test = pd.read_excel('sample.xlsx')

for i in range(len(df_test)):
    ax= df_test.loc[i,"X-Koordinate"]
    ay= df_test.loc[i,"Y-Koordinate"]
    az= df_test.loc[i,"Z-Koordinate"]
    k = i+1
    for j in range(k,len(df_test)):
        bx = df_test.loc[j,"X-Koordinate"]
        by = df_test.loc[j,"Y-Koordinate"]
        bz = df_test.loc[j,"Z-Koordinate"]
        if coordinates_check(ax,ay,az,bx,by,bz):
            print("Matched:",df_test.loc[i,"S/N"],"-->",df_test.loc[j,"S/N"])

Infolgedessen ist es gut gemacht. image.png

Ich wünschte, ich hätte eine kleine Datenmenge.

Die Daten, die ich dieses Mal verwenden möchte, sind über 10.000 Zeilen und es dauerte ** ungefähr 3 Stunden **, um den obigen Code auszuführen ... Ungefähr zu dieser Zeit dachte ich, es sollte einen besseren Weg geben. Wenn Sie einen guten Weg kennen, helfen Sie bitte!

Recommended Posts

Überprüfen Sie, ob für die 3D-Koordinatendatengruppe "fast übereinstimmende" Punkte vorhanden sind.
Überprüfen Sie, ob die Zeichen in Python ähnlich sind
Feststellen, ob das Bild Vögel enthält