unir matrices por columnas coincidentes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />¿Alguien tiene una secuencia de comandos elegante para unir matrices en la forma en que unen tablas (haciendo coincidir columnas)?
Gracias a todos por adelantado,
Ron
Re: unir matrices por columnas coincidentes¡Gracias!
así que supongo que estoy de vuelta a mis viejos comandos de mesa después de todo ...
Re: unir matrices por columnas coincidentesSí, todas esas funciones deberían ser multiproceso.
El multihilo en gran medida no es compatible con JSL (esto es en su mayor parte una buena cosa). Sin embargo, si eso fuera cierto para JMP, el programa sería súper lento e inutilizable para un usuario final. La mayoría de los comandos de envío '<<' tienden a ser multiproceso porque son nativos de JMP, aunque no todos.
Solo prueba una función si tienes una pregunta al respecto. Por ejemplo, abra su Administrador de tareas y ejecute algo como esto:
dt = nueva mesa ( "prueba" ) ;
dt << Nueva Columna ( "prueba" , Numérico , Continuo , Valores ( 1 :: 100000000 )) ;
dt << Eliminar filas ( 1 :: 100000000 ) ;
clost ( dt , nosave ) ;
Cuando ejecuto esto, puedes ver los cuatro procesadores mejorando.

Re: unir matrices por columnas coincidentesGracias msharp , esto es útil saber.
¿Qué pasa con el resumen de la mesa? borrando múltiples filas? borrando columnas múltiples?
Ron
Re: unir matrices por columnas coincidentesPor lo que sé, las uniones y algunas otras operaciones de tabla son las únicas operaciones de múltiples subprocesos en JMP. Yo pondría todo mi dinero para que una combinación de tabla sea más rápida que una combinación de matriz.
Re: unir matrices por columnas coincidentesLo siento Ron. Mi respuesta no fue para implicar que uno no podría hacer que los casos específicos de "unirse" más rápido con manipulaciones matriciales, probablemente uno podría hacerlo. Es solo que (como lo muestran las opciones en 'Tablas> Unirse'), unirse no es "una cosa", y no conocía los detalles de su (s) caso (s).
Re: unir matrices por columnas coincidentesGracias Ian @ JMP Para el guión y la punta.
Estoy de acuerdo en que el poder de JMP es sobresaliente y mucho más fácil de trabajar que los comandos crudos de scripting utilizando matrices. en mi caso, también ahorra una gran cantidad de tiempo, ya que puedo hacer rápidamente las "comprobaciones" de que está haciendo lo que pretendía al utilizar la interfaz interactiva en cualquier momento.
La cosa es el script que escribí en el que todo el proceso utiliza tablas de datos: resumir, unir, comparar, eliminar filas y extraer valores. Esperaba hacerlo más rápido convirtiéndolo en matrices, pero me doy cuenta de que este no será el caso.
Ron
Re: unir matrices por columnas coincidentesSólo un poco la lengua en la mejilla sugiero lo siguiente. Puede parecer perverso, pero, por otro lado, lograr que JMP haga el trabajo por usted siempre es bueno. En este caso, tomaría un poco de esfuerzo reinventar la flexibilidad de 'Join ()' en el mundo de las matrices.
NombresDefaultToHere ( 1 ) ;
// Une dos matrices 'm1' y 'm2' usando las columnas clave 'c1' y 'c2' (todas las columnas están retenidas)
joinMatrices =
Función ({ m1 , c1 , m2 , c2 } , { Predeterminado local } ,
dt1 = Asable ( m1 , << Invisible ) ;
dt2 = Asable ( m2 , << Invisible ) ;
// Editar la expresión 'Join ()' a gusto. . .
dt3 = dt1 << Unirse (
Con ( dt2 ) ,
Haciendo coincidir las columnas ( "Columna" || Carbonizarse ( c1 ) = "Columna" || Carbonizarse ( c2 ) ) ,
Soltar múltiplos ( 0 , 0 ) ,
Incluir no coincidencias ( 0 , 0 ) ,
Conservar el orden de la mesa principal ( 1 ) ,
Invisible
) ;
m3 = dt3 << getAsMatrix ;
Cerrar ( dt1 , NoSave ) ;
Cerrar ( dt2 , NoSave ) ;
Cerrar ( dt3 , NoSave ) ;
m3 ;
) ;
// Hacer un par de matrices.
norte = 10 ; // Número de filas
m1 = ( 1 :: norte ) `|| J ( norte , norte , 10 ) ;
m2 = Aleatoria shuffle ( m1 El 0 , 1 ]) || Identidad ( norte ) ;
// Prueba la función
joinMatrices ( m1 , 1 , m2 , 1 ) ;