| Autor |
Beitrag |
Strophi
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 17.02.04 16:36
Hi Junx,
ich komme von C++ nach Delphi, und habe eine Sparse-Vektor-Klasse, und eine
VectorList Klasse. Statisch funktionierts.
Mein Beispiel-TestScript ist dies:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| v1:=TVector.Create(p_vid_comp); v2:=TVector.Create(p_vid_comp);
v1.InsertComp (1,1); v1.InsertComp (2,1); v1.Sort;
v2.InsertComp (1,2); v2.InsertComp (2,2); v2.Sort;
Memo1.Lines.Add ('v1'); v1.WriteVector(Memo1); Memo1.Lines.Add ('v2'); v2.WriteVector(Memo1);
Memo1.Lines.Add ('Distanz v1,v2 : '+FloatToStr(v1.EuclDist(v2)));
Vectors:=TVectorList.Create;
VectorList.InsertVector(@v1); VectorList.InsertVector(@v2); VectorList.CalcMean;
Memo1.Lines.Add ('Center-Vektor'); VectorList.GetMeanVector.WriteVector(Memo1); |
und alles läuft vom feinsten.
so, jetzt muß ich in der Anwendung, für die ich das Zeug brauche, die
Vektoren die ich in die Vektorliste einfügen will, dynamisch erzeugen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| for i:=1 to unknown do begin c:=TVector.Create(p_vid_comp);
---> in C++ würde ich jetzt sowas sagen wie c = new TVector(p_vid_comp) und c zeigt ---> auf einen neuen TVector, TVectorList kommt damit gut klar
c.InsertComp (1, X); c.InsertComp (2, Y); c.Sort; Core.InsertVector(@c); end; |
Sobald ich mir die Vektoren in Core anschauen will kracht's ganz laut. Ich schätze auch in Delphi läßt sich durch Angabe der Adresse einer Variablen und Ändern des Werts keine dynamische Variable erzeugen
Aber wie macht man ?
Kann mir da jemand auf die Sprünge helfen?
mfg
Strophi
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.02.04 16:42
Hm. Ich habe das jetztnicht so ganz verstanden, aber kuck dir mal in der Hilfe New, Dispose und GetMem und FreeMem an. Eventuell ist es ja das, was du suchst.
|
|
Brainiac
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.02.04 16:55
Könntest du vielleicht mal schreiben, wie deine Klassen und Variablen deklariert sind.
Vorallem die Definition von InsertVector() würde mich mal interessieren.
Wenn InsertVector(@v1) funktioniert {was ich nicht verstehe}, dann müsste InsertVector(@c) eigentlich auch gehen, aber wozu das @ überhaupt verwendet wird, ist mir noch schleierhaft.
Nebenbei, was du mit Create erstellst, musst du auch mit Free wirder freigeben.
|
|
Strophi 
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 17.02.04 17:52
Titel: einfach verkette Liste
Die Vektoren sind als ein fach verkettete Liste implementiert, deren Knoten die Komponenten(des Vektors)-ID und den dazugehörigen Komponentenwert. Alle Operatione befassenn sich nur mit den Nicht-Null Elementen.
InsertVector der Vektorliste bekommt die Adresse eines Vektors übergeben, für den sie dann zuständig wird. Im Destructor werden alle Vektoren gefree'd. Wenn alle Vektoren in der Vektorliste eingetragenb sind, kann man mit CalcMean den Mittelwert-Vektor aller in der Vektorliste enthaltenen Vektoren berechnen per getMeanVector kann man mit ihm rechnen.
Ich brauche das, um dem k-means-algorithmus auf Vektoren anwenden zu können, deren Dimensionalität in die Hundertetausende geht, aber nur wenige Komponenten nicht Null sind (ca 2000 pro Vektor).
Ich schau mir mal GetMem an. Scheint ja sowas wie die alloc-Funktionen von C zu sein...
mfg
Jan
|
|
Brainiac
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.02.04 21:11
Hättest du nicht einfach mal Teile der Typdeklaration posten können, denn jetzt weiß ich immernoch nicht, wie InsertVector definiert ist.
Also der @ Operator ist in jedem Falle hier total sinlos, da eine Klassenvariable (v1,v2,c) schon an sich ein Pointer ist. Mit dem @ holst du dir dann einen Pointer auf den Speicherort des Pointers zu der Klasse. Das ist es was mich stört, weshalb ich halt gerne die Deklaration von InsertVector gesehen hätte.
Prinzipiell denke ich, müsste es so aussehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| for i:=1 to unknown do begin c:=TVector.Create(p_vid_comp); c.InsertComp (1, X); c.InsertComp (2, Y); c.Sort; Core.InsertVector(c); c.Free; end; |
Da du c als Variable deklariert hast, brauchst du so Sachen wie GetMem, etc sicherlich nicht.
Die Aufrufe von Create und Free legen passenden Speicher an, und geben ihn frei. c ist zu jedem Zeitpunkt ein Pointer auf diesen Speicher.
Hoffe ich konnte dir etwas helfen.
Zuletzt bearbeitet von Brainiac am Do 19.02.04 12:50, insgesamt 1-mal bearbeitet
|
|
Strophi 
Hält's aus hier
Beiträge: 12
|
Verfasst: Do 19.02.04 12:42
Titel: OOP
Hi,
danke für Eure Antworten.
...da eine Klassenvariable (v1,v2,c) schon an sich ein Pointer ist. ...
Ich muß mich mal ein wenig tiefer mit Delphi-Klassen befassen.
mfg
Strophi
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 19.02.04 12:56
Titel: Werbung
|
|
Strophi 
Hält's aus hier
Beiträge: 12
|
Verfasst: So 22.02.04 22:54
Titel: Gelöst...
Hi Junx,
ich hab' jetzt eine Lösung: Ich hab' TVectorList mit dynamischen Arrays (Was sagt N.W. dazu??) neu geschrieben, und der Cluster-Algorithmus rennt feuerartig: Zum Beäugen und bestaunen gibts die Ergebnisse bald bei einer (deutsch-sprachigen) Suchmaschine....
mfg
Strophi
|
|
Strophi 
Hält's aus hier
Beiträge: 12
|
Verfasst: So 22.02.04 23:01
Titel: Toter Link
Hi,
dieses Klassen-Tutorial gibts anscheinend garnicht:
<zitat>
Werbung
www.luckie-online.de/tutorials/klassen/
</zitat>
Hier die Antwort:
Not Found
The requested URL /tutorials/klassen/ was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 22.02.04 23:05
Doch gibt es, ich habe nur gerade umgebaut. Aber wer klver ist geht auch mal über die Hauptseite. www.luckie-online.de/Tutorials
|
|
Strophi 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mo 23.02.04 00:49
Titel: dynamische arrays
Hi,
danke für eure Hinweise. Hab' meine VectorList-Klasse umgebaut, jetzt macht' sie es mit dynamischen Arrays. Nicht sehr effizient, aber es ist noch ein Prototyp. Aber er läuft für 3D-Vektoren schon sehr gut. Jetzt kommen die wirklich großen Vektoren dran...
mfg
Strophi
|
|
Strophi 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mo 23.02.04 01:12
Titel: Links
Wenn ich auf Deine Tutorials angewiesen wäre, hättest Du Recht.
UnKlvere klicken Links.
mfg
Strophi
|
|