Seite 1 von 1

Probleme mit Koordinatencheck

Verfasst: Donnerstag 20. März 2008, 11:42
von htw7448
Ich versuche das ganze mal vereinfacht zu beschreiben. Ich habe als Vorgabe Objekte, welche aus beliebig vielen Punkten bestehen können und ich habe über eine Selektionsmenge beliebig viele Punkte ausgewählt.

Das Ziel besteht darin eine Prüfung zu implementieren die folgendes macht:

- die Punkte aus der Selektionsmenge sollen in x,y,z auf Übereinstimmung aller Punkte der Objekte überprüft werden

- bei Übereinstimmung in mind. 3 Punkten in x,y,z gilt das Objekt als identifiziert

meine Idee war zunächst die Selektionspunkte in x,y,z Form in eine Liste zu schreiben. Der Name der Punkte usw. spielt an dieser Stelle keine Rolle.

Code: Alles auswählen

sel_menge = [[p.get('x'), p.get('y'), p.get('z')] for p in sel_points]
die Objektmenge ist durch op beschrieben und die einzelnen Koordinaten bekommt man durch (op_x = X-Koordinaten aller A-Koordinaten der X-ten Punkte der Objektmenge):

Code: Alles auswählen

op_Ax= [opoint.get('indentified_point_%s'%A, X) for opoint in op]
wobei durch A - x,y,z angegeben werden und durch X der x-te Punkt der Objektes. Die Anzahl der Punkte eines Objektes ist zwar definiert aber nicht direkt abzufragen. Stattdessen wird 'None' zurückgeliefert wenn es der X-ten Punkt nicht gibt.

indentified_point_ ist ein ziemlich unpassendes Schlüsselwort, kann aber nicht geändert werden, also nicht davon irritieren lassen.

Und genau da liegt mein Problem ich habe keinen Plan wie ich a) einen effektiven Objektpunktgenerator baue und b) wie ich eine Möglichst lineare Prüfung hinbekomme da es sich um große Datenmengen handeln kann. Ich hoffe da blickt jemand durch.

MfG

Verfasst: Donnerstag 20. März 2008, 11:58
von BlackJack
Ich war von Anfang an verunsichert und der Satz nach dem ersten Quelltext-Schnippsel hat mir den Rest gegeben.

Für a) würde ich trotzdem mal auf einen Iterator tippen, der alle `X` durchläuft und in ein `itertools.takewhile()` verpackt wird und bei b) tun's vielleicht erst einmal `set`-Operationen auf Punktemengen.

Verfasst: Donnerstag 20. März 2008, 13:36
von htw7448
Ich habe das in der Tat ein wenig wirr geschrieben. Was ich damit sagen wollte. Die Objektmenge op besteht aus vielen Objekten welche wiederum durch eine bestimmte Anzahl von Punkten beschrieben sind.

zum Beispiel für das Filtern des ersten Objektes, dessen erster Punkt nach x

Code: Alles auswählen

firstObjekt_firstPoint_x = op[0].get('identified_point_x', 0)
Ich komme mit den 2 Iteratoren in Verbindung mit der Abbruchbedingung nicht klar.

1. Iterator = über die Objekte
2. Iterator = über die einzelnen Objektpunkte
Abbruchbedingung = falls .get None zurückliefert gibt es keine weiteren Objektpunkte mehr

Verfasst: Donnerstag 20. März 2008, 14:37
von htw7448
Ich komme bei der Sache hier nicht über den Berg. Ich fahre jetzt 1 Woche in den Urlaub. Danach werde ich ein itertools Tutorial schreiben.

Das was momentan an Doku vorhanden ist stinkt gewaltig zum Himmel.

MfG

Verfasst: Donnerstag 20. März 2008, 14:41
von EyDu
Also ich finde die Doku in Sachen "itertools" eigentlich sehr gut. Vorallem durch den zu den Funktionen äquivalenten angegebenen Code ist die Funktionsweise sehr genau definiert.

Verfasst: Donnerstag 20. März 2008, 14:46
von htw7448
Beispiel takewhile:
takewhile( predicate, iterable)
Make an iterator that returns elements from the iterable as long as the predicate is true. Equivalent to:

def takewhile(predicate, iterable):
for x in iterable:
if predicate(x):
yield x
else:
break
ohne weiteres Beispiel in der Python Doku. Es reicht eben nicht etwas zu lesen, man braucht gute Beispiele um auf die eigentliche Logik hinter dem ganzen zu kommen. Auswendig gelernt habe ich noch nie gern!

Verfasst: Donnerstag 20. März 2008, 15:09
von BlackJack
Hier geht's nicht um auswendig lernen, sondern darum den Code zu verstehen. Und der ist ja nun recht einfach gestrickt. Wenn einem die Beschreibung als Text, die einfache und sehr präzise Beschreibung als Quelltext und vielleicht noch der Python-Interpreter um seine Vermutungen zu überprüfen, dabei nicht reichen, dann fehlt irgendwo das abstrakte Denkvermögen um Programmieren zu können.

Verfasst: Donnerstag 20. März 2008, 15:26
von Leonidas
EyDu hat geschrieben:Also ich finde die Doku in Sachen "itertools" eigentlich sehr gut. Vorallem durch den zu den Funktionen äquivalenten angegebenen Code ist die Funktionsweise sehr genau definiert.
Finde ich jetzt auch. Spätestens wenn du aus zufall mehrere der itertools selbst implementiert hast, wirst du feststellen, dass die Fälle in denen man itertools braucht in der Regel zu komplex sind um ein sinnvolles Beispiel zu machen, wo die Leute sich nicht am Kopf kratzen und überlegen, warum man es so kompliziert gemacht hat.

Aber ich will dich natürlich nicht abhalten ein solches Tutorial zu schreiben. Wenn es auf englisch und optimalerweise in reST geschrieben sein sollte, könnte man auch eine Aufnahme in die offizielle Dokumentation anstreben.