directed_hausdorff#
- scipy.spatial.distance.directed_hausdorff(u, v, rng=0)[Quelle]#
Berechnet den gerichteten Hausdorff-Abstand zwischen zwei 2-D-Arrays.
Die Abstände zwischen Punkten werden mit einer euklidischen Metrik berechnet.
- Parameter:
- u(M,N) array_like
Eingabearray mit M Punkten in N Dimensionen.
- v(O,N) array_like
Eingabearray mit O Punkten in N Dimensionen.
- rngint oder
numpy.random.Generatoroder None, optional Zustand des Pseudozufallszahlengenerators. Standard ist 0, sodass das Mischen von u und v reproduzierbar ist.
Wenn rng als Schlüsselwort übergeben wird, werden andere Typen als
numpy.random.Generatorannumpy.random.default_rngübergeben, um eineGenerator-Instanz zu erstellen. Wenn rng bereits eineGenerator-Instanz ist, wird diese Instanz verwendet.Wenn dieses Argument positionsabhängig übergeben wird oder seed als Schlüsselwort übergeben wird, gilt das Legacy-Verhalten für das Argument seed.
Wenn seed None ist, wird eine neue
RandomState-Instanz verwendet. Der Zustand wird mit Daten aus/dev/urandom(oder dem Windows-Äquivalent) initialisiert, falls verfügbar, andernfalls aus der Systemuhr.Wenn seed eine Ganzzahl ist, wird eine neue
RandomState-Instanz mit seed verwendet.Wenn seed bereits eine
Generator- oderRandomState-Instanz ist, wird diese Instanz verwendet.
Geändert in Version 1.15.0: Als Teil des SPEC-007-Übergangs von der Verwendung von
numpy.random.RandomStatezunumpy.random.Generatorwurde dieses Schlüsselwort von seed zu rng geändert. Für einen Übergangszeitraum funktionieren beide Schlüsselwörter weiterhin, obwohl nur eines gleichzeitig angegeben werden kann. Nach dem Übergangszeitraum geben Funktionsaufrufe mit dem Schlüsselwort seed Warnungen aus. Das Verhalten von sowohl seed als auch rng wird oben beschrieben, aber nur das Schlüsselwort rng sollte in neuem Code verwendet werden.
- Rückgabe:
- ddouble
Der gerichtete Hausdorff-Abstand zwischen den Arrays u und v,
- index_1int
Index des Punktes, der zum Hausdorff-Paar in u beiträgt
- index_2int
Index des Punktes, der zum Hausdorff-Paar in v beiträgt
- Löst aus:
- ValueError
Es wird eine Ausnahme ausgelöst, wenn u und v nicht die gleiche Anzahl von Spalten haben.
Siehe auch
scipy.spatial.procrustesEin weiterer Ähnlichkeitstest für zwei Datensätze
Hinweise
Verwendet die Early-Break-Technik und den Zufallsstichprobenansatz, der von [1] beschrieben wird. Obwohl die Worst-Case-Leistung
O(m * o)beträgt (wie beim Brute-Force-Algorithmus), ist dies in der Praxis unwahrscheinlich, da die Eingabedaten den Algorithmus dazu zwingen würden, jede einzelne Punktinteraktion zu untersuchen, und nachdem der Algorithmus die Eingabepunkte gemischt hat. Die Best-Case-Leistung beträgt O(m), die erfüllt ist, indem ein innerer Schleifenabstand gewählt wird, der kleiner als cmax ist und so oft wie möglich einen frühen Abbruch verursacht. Die Autoren haben formal gezeigt, dass die durchschnittliche Laufzeit näher an O(m) liegt.Hinzugefügt in Version 0.19.0.
Referenzen
[1]A. A. Taha und A. Hanbury, „An efficient algorithm for calculating the exact Hausdorff distance.“ IEEE Transactions On Pattern Analysis And Machine Intelligence, Bd. 37 S. 2153-63, 2015.
Beispiele
Findet den gerichteten Hausdorff-Abstand zwischen zwei 2-D-Koordinaten-Arrays
>>> from scipy.spatial.distance import directed_hausdorff >>> import numpy as np >>> u = np.array([(1.0, 0.0), ... (0.0, 1.0), ... (-1.0, 0.0), ... (0.0, -1.0)]) >>> v = np.array([(2.0, 0.0), ... (0.0, 2.0), ... (-2.0, 0.0), ... (0.0, -4.0)])
>>> directed_hausdorff(u, v)[0] 2.23606797749979 >>> directed_hausdorff(v, u)[0] 3.0
Findet den allgemeinen (symmetrischen) Hausdorff-Abstand zwischen zwei 2-D-Koordinaten-Arrays
>>> max(directed_hausdorff(u, v)[0], directed_hausdorff(v, u)[0]) 3.0
Findet die Indizes der Punkte, die den Hausdorff-Abstand erzeugen (das Hausdorff-Paar)
>>> directed_hausdorff(v, u)[1:] (3, 3)