Wie erstelle ich verschachtelte Listen in JSL?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe eine Datentabelle mit geografischen Punkten (GPS-Standorten). Jede Zeile stellt einen Standort mit den Spalten Längengrad, Breitengrad usw. dar.
Ich versuche, zu diesen Punkten eine Clusteranalyse durchzuführen.
Ich habe bereits einen Algorithmus, der für jeden Punkt alle Punkte innerhalb eines vordefinierten Radius (Nachbarschaft) durchsucht und sie einer Liste namens Cluster hinzufügt.
So kann ich für jeden Punkt in meiner Datentabelle eine Liste erstellen, die alle Punkte in der Umgebung des Punktes (Clusters) enthält.
Jetzt suche ich nach einer Lösung, um alle diese Cluster-Listen in einer Liste zusammenzufassen, die dann alle Cluster-Listen enthält.
Ich möchte eine verschachtelte Liste oder eine Liste in einer Liste haben, damit ich alle Cluster durchlaufen und beispielsweise einige der Cluster usw. zusammenführen kann.
Ist das mit jmp/jsl überhaupt möglich?
Vielen Dank für Ihre Hilfe!
Betreff: Wie erstelle ich verschachtelte Listen in JSL?Protokoll löschen();
// Nehmen wir an, Sie stehen vor so etwas
// Punkt(Zeile) -> Clusterliste
// p1 = {1,4,6,8};
// p2 = {2,9,6,4,1,7};
// p3 = {3,2,5};
// Wenn Sie Ihre anfänglichen Clusterlisten generieren (ich gehe davon aus, dass Sie über Ihre Tabellenzeilen iterieren)
// Füge sie im laufenden Betrieb zu einem assoziativen Array hinzu.
// ClusterAa = associativeArray();
// while(durch Ihre Punkte und Listen iterieren,
// ClusterAa["p1"] = {1,4,6,8}; // Der Schlüssel hier ist ein String, könnte aber auch eine Ganzzahl sein, Wert = Clusterliste
// zB clusterAa[row] = Cluster List;
// );
// Wenn Sie vorwärts springen, sollten Sie ein Array wie dieses haben.
ClusterAa = associativeArray({
{"p1", {1,4,6,8}},
{"p2", {2,9,6,4,1,7}},
{"p3", {3,2,5}}
});
listOfPoints = clusterAa << getKeys; // Schlüssel als Liste abrufen {"p1", "p2", "p3"}
i=1;
listOfClusterLists = {};
while(i <= nItems(listOfPoints), // Über die Liste iterieren und zu einer linearen Liste hinzufügen
insertInto(listOfClusterLists, evalList(list(clusterAa[listOfPoints ])));
i++;
);
show(listOfClusterLists);
// Ergebnis = listOfClusterLists = {{1, 4, 6, 8}, {2, 9, 6, 4, 1, 7}, {3, 2, 5}};
Natürlich können Sie auch das Clustering-Tool auf der Registerkarte „Multivariate Methoden“ in JMP ausprobieren. Ich habe mit diesem Tool einigermaßen gute Erfolge beim K-Means-Clustering erzielt.
Betreff: Wie erstelle ich verschachtelte Listen in JSL?Nachdem Sie Ihre ausführliche Beschreibung Ihrer Wünsche gelesen haben, schlage ich vor, dass Sie, da eine Datentabelle für JMP nur eine X-mal-Y-Matrix ist, die Daten einfach in einer Datentabelle belassen und nicht alles verschieben sollten zu Listen und Listen von Listen.
Wenn Sie „Zeilen wo abrufen“ verwenden und neue Spalten erstellen, um die verschiedenen P-Werte zu speichern, die im angegebenen Radius für P gefunden wurden, werden alle Ihre Daten direkt in Ihrer Datentabelle organisiert.
Betreff: Wie erstelle ich verschachtelte Listen in JSL?Jeder Cluster hat einen sogenannten Kern, das ist der Punkt, auf dem der Cluster ursprünglich aufgebaut wurde.
Ich habe also einen Punkt P (dargestellt durch eine Zeilennummer meiner Datentabelle).
Der nächste Schritt besteht darin, in meiner Datentabelle nach allen Punkten zu suchen, die in einem vordefinierten Radius um meinen Punkt P liegen.
Wenn ich alle Punkte habe, füge ich sie in eine neue Liste L ein. Anschließend füge ich den Punkt P in die Liste L an der Position 1 ein.
Jetzt repräsentiert meine Liste L einen Cluster. Der Kern des Clusters ist mein Punkt P. Und meine Liste sieht so aus:
L = { , }
Man könnte sagen, dass die Zeilennummer des Punktes P tatsächlich der „Schlüssel“ des Clusters/der Liste ist.
Ich sollte erwähnen, dass L keine verschachtelte Liste ist! L wird in eine andere Liste eingefügt.
ClusterList = { ..., L-2, L-1, L, L+1, L+2, ...}
ClusterList ist die verschachtelte Liste.
Nachdem ich die Cluster-Liste erstellt habe, möchte ich sie durchlaufen und bestimmte Cluster zusammenführen.
Zum Beispiel:
P ist der Kern von Cluster L.
Wenn L+2 P enthält, dann fügen Sie alle Punkte von L in L+2 ein und löschen Sie anschließend L.
Mit der nächsten Liste in ClusterList iterieren ...
Betreff: Wie erstelle ich verschachtelte Listen in JSL?Wenn Sie eine Art „Schlüssel“ haben, wären assoziative Arrays hilfreich.Ich vermute, dass in Ihrem Fall der assoziative Array-Schlüssel der Cluster wäre.
Betreff: Wie erstelle ich verschachtelte Listen in JSL?Die Liste ist eine sehr flexible Datenstruktur, sodass es Listen geben kann, die nicht homogen sind (d. h. deren Elemente nicht denselben Datentyp haben). Sie können natürlich eine „Liste von Listen“ erstellen – zum Beispiel:
k = 3 ; // Anzahl der Elemente in der Liste der Listen
meineListe = {};
Für (ich= 1 , i<=k, i++,
kk = RandomInteger ( 1 , 5 ); // Anzahl der Elemente in dieser Liste
itemList = {};
Für (ii= 1 , ii<=kk, ii++,
Einfügen in (Artikelliste, Verkohlen ( RandomInteger ( 1 , 10 )));
);
Drucken (Artikelliste);
Einfügen in (meine Liste, Bewertung ( EvalList ({itemList})));
);
Drucken (meine Liste);