¿Cómo hacer listas anidadas en JSL?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo una tabla de datos con puntos geográficos (ubicaciones GPS). Cada fila representa una ubicación con columnas de longitud, latitud, etc.
Estoy intentando hacer un análisis de conglomerados sobre estos puntos.
Ya tengo un algoritmo que busca para cada punto todos los puntos dentro de un radio predefinido (vecindario) y los agrega a una lista llamada cluster.
Entonces, para cada punto en mi tabla de datos, puedo generar una lista que contiene todos los puntos en la vecindad del punto (clúster).
Ahora estoy buscando una solución para agregar todas estas listas de clústeres en una lista que luego contenga todas las listas de clústeres.
Quiero tener una lista anidada, o una lista en una lista, para poder recorrer todos los clústeres y, por ejemplo, fusionar algunos de los clústeres, etc.
¿Es eso posible con jmp/jsl?
¡Gracias por tu ayuda!
Re: ¿Cómo hacer listas anidadas en JSL?borrar registro();
// Digamos que estás mirando algo como esto
// punto(fila) -> Lista de clústeres
// p1 = {1,4,6,8};
// p2 = {2,9,6,4,1,7};
// p3 = {3,2,5};
// Cuando estás generando tus listas de clústeres iniciales (supongo que iteras sobre las filas de tu tabla)
// agregarlos a una matriz asociativa sobre la marcha.
// clusterAa = associativeArray();
// while(iterando sobre tus puntos y listas,
// clusterAa["p1"] = {1,4,6,8}; // La clave aquí es una cadena pero podría ser un número entero, valor = lista de clústeres
// por ejemplo clusterAa[fila] = Lista de clusters;
// );
// Saltando hacia adelante deberías tener una matriz como esta.
clusterAa = matriz asociativa({
{"p1", {1,4,6,8}},
{"p2", {2,9,6,4,1,7}},
{"p3", {3,2,5}}
});
listaDePuntos = clusterAa << getKeys; // Obtener las claves como una lista {"p1", "p2", "p3"}
yo=1;
listaDeClusterLists = {};
while(i <= nItems(listOfPoints), // Iterar sobre la lista y agregar a una lista lineal
insertInto(listaDeClusterLists, evalList(lista(clústerAa[listaDePuntos ])));
yo ++;
);
mostrar(listaDeClusterLists);
// Resultado = listaDeClusterLists = {{1, 4, 6, 8}, {2, 9, 6, 4, 1, 7}, {3, 2, 5}};
Por supuesto, también puedes probar la herramienta de agrupación en clústeres en la pestaña Métodos multivariados de JMP. He tenido un éxito razonable al realizar la agrupación en clústeres de K-Means utilizando esta herramienta.
Re: ¿Cómo hacer listas anidadas en JSL?Después de leer su descripción detallada de lo que desea, le sugiero que, dado que una tabla de datos es solo una matriz X por Y para JMP, es posible que desee considerar simplemente mantener los datos en una tabla de datos, en lugar de hacer todo el movimiento. a listas y listas de listas.
Usando "Obtener filas dónde" y creando nuevas columnas para guardar los diversos valores de P que se encontraron en el radio dado para P, tendrá todos sus datos organizados directamente en su tabla de datos.
Re: ¿Cómo hacer listas anidadas en JSL?Cada grupo tiene un núcleo, que es el punto sobre el que se construyó inicialmente el grupo.
Entonces tengo un punto P (representado por un número de fila de mi tabla de datos).
El siguiente paso es buscar todos esos puntos en mi tabla de datos, que están en un radio predefinido alrededor de mi punto P.
Cuando tengo todos los puntos, los inserto en una nueva lista L. Luego inserto el punto P en la Lista L en la posición 1.
Ahora mi lista L representa un grupo. El núcleo del grupo es mi punto P. Y mi lista se ve así:
L = { , }
Se podría decir que el número de fila del punto P es de hecho la "clave" del grupo/lista.
¡Debo mencionar que L no es una lista anidada! L se inserta en otra lista.
ListaClúster = {..., L-2, L-1, L, L+1, L+2, ...}
clusterList es la lista anidada.
Después de haber creado la lista de clústeres, quiero recorrerla en iteración y fusionar ciertos clústeres.
Por ejemplo:
P es el núcleo del grupo L.
Si L+2 contiene P, inserte todos los puntos de L en L+2 y elimine L después.
Iterar con la siguiente lista en clusterList...
Re: ¿Cómo hacer listas anidadas en JSL?Si tiene algún tipo de "clave", las matrices asociativas serían útiles.Supongo que en su caso la clave de la matriz asociativa sería el clúster.
Re: ¿Cómo hacer listas anidadas en JSL?La lista es una estructura de datos muy flexible, al punto que puedes tener listas que no sean homogéneas (es decir, en las que los elementos no tengan el mismo tipo de datos). Ciertamente puedes crear una 'lista de listas', por ejemplo:
k = 3 ; // No. de elementos en la lista de listas
miLista = {};
Para (yo= 1 , yo<=k, yo++,
kk = EnteroAleatorio ( 1 , 5 ); // No. de elementos en esta lista
Lista de elementos = {};
Para (iii= 1 , ii<=kk, ii++,
Insertar en (lista de articulos, Carbonizarse ( EnteroAleatorio ( 1 , 10 )));
);
Imprimir (lista de articulos);
Insertar en (mi lista, evaluar ( Lista de evaluación ({lista de articulos})));
);
Imprimir (mi lista);