Come creare elenchi nidificati in JSL?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ho una tabella dati con punti geografici (posizioni GPS). Ogni riga rappresenta una posizione con colonne longitudine, latitudine, ecc.
Sto cercando di fare un'analisi cluster su questi punti.
Ho già un algoritmo che cerca per ogni punto tutti i punti all'interno di un raggio predefinito (quartiere) e li aggiunge ad una lista denominata cluster.
Quindi, per ogni punto nella mia tabella dati, posso generare un elenco che contiene tutti i punti nelle vicinanze del punto (cluster).
Ora sto cercando una soluzione per aggiungere tutti questi elenchi di cluster in un elenco che contenga quindi tutti gli elenchi di cluster.
Voglio avere un elenco nidificato o un elenco in un elenco, in modo da poter scorrere tutti i cluster e ad esempio unire alcuni cluster, ecc.
È possibile anche con jmp/jsl?
Grazie per l'aiuto!
Ri: Come creare elenchi nidificati in JSL?pulisci il registro();
// Diciamo che stai osservando qualcosa del genere
// punto(riga) -> Elenco cluster
// p1 = {1,4,6,8};
// p2 = {2,9,6,4,1,7};
// p3 = {3,2,5};
// Quando stai generando gli elenchi di cluster iniziali (presumo che tu esegua l'iterazione sulle righe della tabella)
// li aggiunge al volo a un array associativo.
// clusterAa = associativeArray();
// mentre (iterando sui tuoi punti ed elenchi,
// clusterAa["p1"] = {1,4,6,8}; // La chiave qui è una stringa ma potrebbe essere un numero intero, valore = elenco cluster
// ad esempio clusterAa[riga] = Elenco cluster;
// );
// Facendo un salto in avanti dovresti avere un array come questo.
clusterAa = associativeArray({
{"p1", {1,4,6,8}},
{"p2", {2,9,6,4,1,7}},
{"p3", {3,2,5}}
});
listaPunti = clusterAa << getKeys; // Ottieni le chiavi come elenco {"p1", "p2", "p3"}
io=1;
listOfClusterLists = {};
while(i <= nItems(listOfPoints), // Itera sull'elenco e aggiunge a un elenco linal
insertInto(listaListeCluster, evalLista(lista(clusterAa[listaPunti ])));
io++;
);
show(listOfClusterLists);
// Risultato = listOfClusterLists = {{1, 4, 6, 8}, {2, 9, 6, 4, 1, 7}, {3, 2, 5}};
Naturalmente potresti anche provare lo strumento Clustering nella scheda Metodi multivariati in JMP. Ho avuto un discreto successo nel clustering K-Means utilizzando questo strumento.
Ri: Come creare elenchi nidificati in JSL?Dopo aver letto la descrizione dettagliata di ciò che desideri, suggerisco che, poiché una tabella dati è solo una matrice X per Y per JMP, potresti voler esaminare semplicemente la conservazione dei dati in una tabella dati, piuttosto che fare tutto lo spostamento a elenchi ed elenchi di elenchi.
Utilizzando "Ottieni righe dove" e creando nuove colonne per salvare i vari valori P trovati nel raggio specificato per P, avrai tutti i tuoi dati organizzati direttamente nella tabella dati.
Ri: Come creare elenchi nidificati in JSL?Ogni cluster ha un cosiddetto nucleo, che è il punto su cui è stato inizialmente costruito il cluster.
Quindi ho un punto P (rappresentato da un numero di riga della mia tabella dati).
Il prossimo passo è cercare tutti quei punti nella mia tabella dati, che si trovano in un raggio predefinito attorno al mio punto P.
Quando ho tutti i punti, li inserisco in una nuova lista L. Successivamente inserisco il punto P nella Lista L alla posizione 1.
Ora la mia lista L rappresenta un cluster. Il nucleo del cluster è il mio punto P. E la mia lista è questa:
L = { , }
Si potrebbe dire che il numero di riga del punto P è in effetti la "chiave" del cluster/lista.
Dovrei menzionare che L non è un elenco annidato! L è Inserito in un'altra Lista.
clusterList = { ..., L-2, L-1, L, L+1, L+2, ...}
clusterList è l'elenco nidificato.
Dopo aver creato l'elenco dei cluster, desidero scorrerlo e unire determinati cluster.
Per esempio:
P è il nucleo del cluster L.
Se L+2 contiene P, inserisci tutti i punti da L in L+2 e successivamente cancella L.
Itera con l'elenco successivo in clusterList...
Ri: Come creare elenchi nidificati in JSL?Se disponi di una sorta di "chiave", gli array associativi sarebbero utili.Immagino che nel tuo caso la chiave dell'array associativo sarebbe il cluster.
Re: Come creare elenchi nidificati in JSL?La lista è una struttura dati molto flessibile, al punto che si possono avere liste non omogenee (cioè in cui gli elementi non hanno lo stesso tipo di dati). Puoi certamente creare un "elenco di elenchi", ad esempio:
k = 3 ; // Numero di elementi nell'elenco degli elenchi
miaLista = {};
Per (io= 1 , i<=k, i++,
kk = Intero casuale ( 1 , 5 ); // Numero di elementi in questo elenco
listaarticoli = {};
Per (ii= 1 , ii<=kk, ii++,
Inserire (elenco articoli, Car ( Intero casuale ( 1 , 10 )));
);
Stampa (elenco articoli);
Inserire (la mia lista, Val ( ListaEval ({ListaArticoli})));
);
Stampa (la mia lista);