
Esta demostración ilustrará algunas maneras de usar matrices. En el diario del curso, en la sección "Datos de Tiempo de Curado". Supongamos que necesitamos calcular el tiempo de curado promedio para cada fecha. Sumaremos todos los valores de tiempo de curado en cada fila y los dividiremos entre el número de muestras. Usaré matrices para realizar este cálculo. De nuevo, las operaciones vectorizadas lo harán más eficiente. En el diario del curso, tengo un script preescrito llamado "Calcular Estadísticas con Matrices". Lo moveré para que podamos ver tanto la tabla de Tiempo de Curado (la haremos un poco más ancha, incluso) como nuestro script. El script comienza creando una variable llamada s. s almacenará el resultado de la función J. Esta función crea una matriz con un número específico de filas, un número específico de columnas y un valor inicial. En este caso, estoy usando la función Nfila sin argumentos. Entonces, simplemente mirará el número de filas en la tabla de datos actual. Ejecutaré la línea. Y pueden ver en el registro que lo que ahora está almacenado en s es este vector de columna de ceros. Y lo usaré para agregar en su lugar cada uno de los valores de tiempo de curado. Estoy usando un bucle for. Inicialicé c equals porque con los datos de tiempo de curado, quiero comenzar con la segunda columna. Pruebo que c sea menor o igual que el número de columnas. Y nuevamente, una buena práctica sería, especialmente si podría estar trabajando con tablas de datos más grandes, hacer este conteo fuera de los bucles for, almacenarlo en una variable y comparar c con esa variable. Luego, el analizador evalúa el cuerpo del bucle for. Y entonces tomamos... miramos primero el lado derecho de la función de asignación. Entonces estoy enviando el mensaje "get as matrix" a la columna esta primera vez y luego agregando eso en su lugar a s. Luego actualizamos c con el operador de post-incremento. Entonces eso agrega uno en su lugar a c. Hacemos una prueba para asegurarnos de que c sigue siendo menor o igual que el número de columnas. Y ahora obtenemos la columna como una matriz y la añadimos en su lugar a s. Así que voy a seguir adelante y ejecutar líneas a través de Y recuerda que la función for devuelve un valor faltante al registro. Pero puedes pasar el cursor sobre s para ver que ahora contiene estos números bastante grandes, la suma de las cinco columnas de tiempo de curado. Por último, voy a enviar un mensaje a la tabla de datos actual, el mensaje de la nueva columna. Y el título de la nueva columna será Promedio. Y para los valores (y de nuevo, estos podrían ser valores establecidos o valores), en realidad voy a realizar un cálculo. Así que, de nuevo, puedo proporcionar funciones al argumento de valores sin tener que crear variables para almacenarlas primero. Así que la función aquí... Tengo una función de división y una función de resta. Estoy tomando s, que es la suma de las columnas de tiempo de curado, y la estoy dividiendo por c menos. Y es por c menos porque empezamos a contar c en. Así que eso resta uno al número de elementos que hemos sumado. Y, por supuesto, c tuvo que incrementarse más allá de la prueba. Tuvo que fallar la prueba. Así que el valor final de c... Puedo pasar el cursor y ver que eso es. Y, sin embargo, en realidad solo sumamos cosas. Así que es por eso que dividimos por c menos. Así que seguiré adelante y ejecutaré esta última línea. Y puedes ver que la columna Promedio se ha creado en la tabla de datos de tiempo de curado. E indicado en el registro, puedes ver que he creado una instancia de un objeto de columna. Y de hecho, línea todo en línea que el resultado podría asignarse a una variable si quisiera seguir trabajando más con esa columna. Ahora, para el siguiente paso de la demostración, quiero trabajar con todos los datos de Tiempo de Curado a la vez, realizando cálculos. Voy a extraer toda la tabla de datos como una matriz, en lugar de una columna a la vez, como hice en este script preescrito. Antes de hacerlo, quiero eliminar la columna que acabo de crear. Seleccionaré todo el contenido de la ventana del Editor de Scripts y enviaré un mensaje a la tabla de datos actual: "Eliminar columnas". La columna que quiero eliminar es la llamada "Promedio". Cabe destacar que usar la tabla de datos actual es muy práctico al realizar pruebas o presentaciones. En un script de producción, es fundamental usar referencias más explícitas a la tabla. Por lo tanto, usar la tabla de datos actual es útil para practicar con scripts, simplemente para probar cómo funciona algo. Pero en la práctica, en un script que se planea implementar o usar y que se desea mantener en diferentes versiones de JMP y en múltiples situaciones, se usará esa referencia explícita a la tabla de datos en lugar de la tabla de datos actual. Así que lo ejecutaré. Esto eliminará la columna que quería eliminar. Se devolvió ese mensaje programable al registro. Ahora, voy a borrar el contenido de la ventana del editor de scripts. Extraeré toda la tabla de datos como una matriz y la almacenaré en la variable m. A m se le asignará el resultado de enviar un mensaje a la tabla de datos actual. Ese mensaje es `get as matrix`. Lo ejecutaré. Pueden ver en el registro, o pueden pasar el cursor sobre `m`, que ya tengo esta matriz. La primera columna contiene números enormes. Esto se debe a que, al enviar `get as matrix` a una tabla de datos, generalmente se extraen todas las columnas numéricas, incluidas las fechas. El día se trata como numérico. Pueden verlo por el icono de tipo de modelado, ya que es continuo. El tipo de dato debe ser numérico. De hecho, si lo hago más amplio, aunque `day` parezca contener caracteres, es solo formato. Está justificado a la derecha porque es un número. `get as matrix` también extrajo ese valor. Y si quiero hacer cálculos sobre el tiempo de curado (y de hecho, los cálculos que quiero hacer implican encontrar un valor mínimo y máximo), no quiero estos grandes valores para el día en esa matriz. Así que voy a ir a una nueva fila. Y tendré cuidado. Quiero mantener visible lo que ya he puesto en la ventana mientras reviso esto, pero no quiero ejecutarlo todo. Así que voy a tener mucho cuidado de ejecutar una línea a la vez. Para deshacerme de esa primera columna, voy a usar la variable m y subíndice con un cero y un uno. Y si recuerdan, ese subíndice simplemente significa no seleccionar ninguna fila en particular. En otras palabras, darme todas las filas en la primera columna. Y voy a asignar eso a la matriz vacía, que son solo los corchetes sin nada en ellos. Y, de nuevo, para ejecutar solo esa línea, puedo resaltarla y usar cualquiera de los métodos que usamos para ejecutar un script completo. Sin embargo, solo ejecutará la parte seleccionada o resaltada. O bien, en el teclado numérico de un teclado de escritorio estándar, puedo presionar la tecla Intro en el extremo derecho. Así, lo que se devuelve al registro es solo la matriz vacía. Pero si coloco el cursor sobre m ahora, o si resalté m y lo ejecuté, pueden ver que ahora solo tenemos valores de tiempo de curado. Hemos eliminado la primera columna con esos números de fecha tan grandes. Iré a una nueva línea y revisaré algunas de las otras funciones matriciales que podemos usar. Así que crearé una variable, a, a la que se le asignará el resultado de usar la función loc, LOC. Y voy a encontrar las posiciones en esta matriz, m, donde los valores son mayores que. Y al ejecutar solo esa línea, tratamos la matriz, m, como si fuera un vector fila y contamos desde la primera posición y simplemente devolvemos las posiciones, las posiciones de subíndice simple, de todos los elementos en la matriz que son mayores que. Ahora, si quisiera los valores reales, crearía una variable llamada avals. Y firmaría ese resultado de subíndice de la matriz almacenada en m con la variable a. Y ejecutaré solo esa línea. Y ahí están los valores reales de tiempo de curado que exceden. Y por supuesto, para agilizar este script, si no necesitara almacenar las posiciones de todos esos valores, en realidad podría simplemente haber subíndice... déjenme copiar esto... subíndice de la matriz m con la función loc. No necesito este paso adicional de almacenar las ubicaciones y luego usarlas, a menos que tenga alguna otra razón para trabajar con las posiciones que había almacenado inicialmente en a en este ejemplo. Lo siguiente que quiero hacer con esta matriz es calcular algunos valores transformados. Esta transformación tomará cada observación del Tiempo de Curado menos el mínimo en toda la tabla, dividido por el rango de los valores máximo y mínimo del Tiempo de Curado, y multiplicado por [número]. Es como tomar la distancia en cada observación desde el Tiempo de Curado mínimo como una proporción del rango. Esto ilustra otra ventaja de trabajar con matrices. Para encontrar un valor mínimo en toda una tabla de datos, ya sea mediante scripts o trabajando interactivamente, trabajar con las columnas individuales de la tabla de datos requeriría muchos pasos para encontrar ese valor mínimo o máximo. Pero al trabajar con una matriz, puedo hacerlo en una línea de código muy corta. En la ventana del editor de scripts (borrando el contenido), crearé una variable minCT (tiempo de curado mínimo) y le asignaré el resultado de usar la función min con m como argumento. Ejecutaré esa línea. El valor mínimo es [número]. Luego, crearé también la variable maxCT. Y le asignaré el resultado de usar la función max con m como argumento. Y ejecutaré solo esa línea. Y eso es Y ahora puedo usar estas variables en mi cálculo de esta transformación. Crearé una variable, t, para almacenar los valores de la transformación. Permítanme ir a una nueva línea. Entonces a t se le asignará el resultado de veces y luego abrir paréntesis para el numerador m menos minCT cerrar paréntesis el signo de división y luego abrir paréntesis para el denominador, maxCT menos minCT. Entonces puedo ejecutar solo esa línea y luego obtengo estos valores de transformación. Cada observación menos el mínimo como una proporción del rango de valores de tiempo de curado. Ahora, eso son muchos decimales. Realmente no tenemos tanta precisión. Entonces podemos redondear estos valores. E iré a una nueva línea nuevamente. Voy a sobrescribir los valores en t asignando el resultado de la función de redondeo de nuevo a t. Podrías hacer esto en una nueva variable si quisieras mantener el original. Voy a escribir "t" y luego el operador de asignación, la función de redondeo. Los argumentos son: ¿qué estoy redondeando? Estoy redondeando los valores almacenados en "t". ¿Y cuántos decimales quiero? Quiero cero. Esto truncará los valores de la matriz. Esto no es lo mismo que formatear una columna de datos para que solo tenga cero decimales, mientras que los valores completos se almacenan en segundo plano. Así que no estoy formateando, sino truncando los valores. Lo ejecutaré. Ahora tengo los valores enteros de los valores transformados. Si quisieras volver a colocar estos valores en la tabla de datos de tiempo de curado, podrías recorrer la matriz y crear nuevas columnas. Si quisiera crear una tabla de datos completamente nueva, existe una función muy simple llamada "as table". Hay argumentos opcionales para nombrar esta tabla y las columnas. Para simplificar esta demostración, usaré la variable "t" como argumento de "as table". Al ejecutarlo, obtengo una tabla sin título con nombres de columna genéricos. Todos los valores de la matriz de transformación se rellenan en esta tabla. Podría especificar el nombre y los encabezados de columna como parte del argumento "as table". O podría usar el script para modificarlo posteriormente. Hemos visto un par de maneras diferentes de extraer valores numéricos de una tabla de datos, ya sea por columna o por toda la tabla: todas las columnas numéricas, toda la tabla de datos y algunas manipulaciones que podemos realizar con matrices.