Quindi questa dimostrazione illustrerà alcuni dei modi in cui è possibile utilizzare le matrici. Quindi nel diario del corso nella sezione farò clic su Cure Time Data. E supponiamo di dover trovare il tempo medio di cura per ogni data. Quindi sommeremo tutti i valori del tempo di polimerizzazione in ogni riga e li divideremo per il numero di campioni. E userò le matrici per eseguire questo calcolo. Questo è, ancora una volta, quelle operazioni vettorizzate lo renderanno più efficiente. Quindi, nel diario del corso, ho uno script pre-scritto chiamato Compute Statistics With Matrices. E lascia che sposti questo in modo da poter vedere sia la tabella dei tempi di cura - la renderemo un po' più ampia, uniforme - sia il nostro copione. Quindi lo script inizia creando una variabile chiamata s. E s memorizzerà il risultato della funzione J. E la funzione J crea una matrice con un numero specificato di righe, un numero specificato di colonne e un valore iniziale. E in questo caso, sto usando la funzione Nrow senza argomenti. Quindi esaminerà solo il numero di righe nella tabella di dati corrente. Quindi eseguirò la riga E puoi vedere nel registro che ciò che ora è archiviato in s è questo vettore colonna di zeri. E lo userò per aggiungere in atto ciascuno dei valori del tempo di cura. Quindi sto usando un ciclo for. Ho inizializzato c è uguale perché con i dati del tempo di cura, voglio iniziare con la seconda colonna. Provo che c è minore o uguale al numero di colonne. E ancora, una procedura ottimale sarebbe, soprattutto se si lavora con tabelle di dati più grandi, eseguire questo conteggio al di fuori dei cicli for, memorizzarlo in una variabile e confrontare c con quella variabile. Successivamente il parser valuta il corpo del ciclo for. E quindi prendiamo: prima osserviamo il lato destro della funzione di assegnazione. Quindi sto inviando il messaggio get as matrix to column questa prima volta e poi lo aggiungo in posizione a s. Quindi aggiorniamo c con l'operatore post-incremento. Quindi ciò ne aggiunge uno a posto a c. Testiamo per assicurarci che c sia ancora minore o uguale al numero di colonne. E ora otteniamo la colonna come matrice e la aggiungiamo in posizione a s. Quindi andrò avanti ed eseguirò le righe e ricorderò che la funzione for restituisce un valore mancante nel registro. Ma puoi passare il mouse sopra s per vedere che ora contiene questi numeri abbastanza grandi, la somma di tutte e cinque le colonne del tempo di cura. Infine, invierò un messaggio alla tabella di dati corrente, il nuovo messaggio di colonna. E il titolo della nuova colonna sarà Media. E per i valori - e ancora, questo potrebbe essere valori o valori impostati - in realtà farò un calcolo. Quindi, ancora una volta, posso fornire funzioni all'argomento dei valori senza dover creare variabili per archiviarle prima. Quindi la funzione qui-- ho una funzione di divisione e una funzione di sottrazione. Prendo s, che è la somma delle colonne del tempo di cura, e la divido per c meno Ed è per c meno perché abbiamo iniziato a contare c in Quindi questo toglie uno dal numero di elementi che abbiamo aggiunto su. E, naturalmente, c ha dovuto aumentare oltre il test. Doveva fallire il test. Quindi il valore finale di c-- posso passare con il mouse e vedere che è quello. Eppure, abbiamo solo aggiunto cose. Ecco perché dividiamo per c meno Quindi andrò avanti ed eseguirò quest'ultima riga. E puoi vedere che la colonna Average è stata creata nella tabella dei dati del tempo di cura. E indicato nel registro, puoi vedere che ho creato un'istanza di un oggetto colonna. E in effetti, allinea tutto in linea che il risultato potrebbe essere assegnato a una variabile se volessi continuare a lavorare di più con quella colonna. Ora, per il passaggio successivo della dimostrazione, voglio lavorare con tutti i dati di Cure Time in una volta, eseguendo calcoli. Quindi estrarrò l'intera tabella di dati come una matrice anziché una colonna alla volta, come ho fatto in questo script pre-scritto. E prima di farlo, voglio sbarazzarmi di quella colonna che ho appena creato. Quindi selezionerò l'intero contenuto di questa finestra dell'editor di script. E invierò un messaggio alla tabella dati corrente. Elimina colonne. E la colonna che voglio eliminare è quella chiamata Media. E vorrei notare, ancora una volta, che l'uso della tabella di dati corrente è molto conveniente quando stai testando le cose o sto presentando. In un tipo di script di produzione, vogliamo davvero usare riferimenti più espliciti alla nostra tabella. Quindi la tabella di dati corrente è utile quando ti eserciti con gli script, solo testando per vedere come funziona qualcosa. Ma in pratica, uno script che stavi pianificando di distribuire o utilizzare e che desideri mantenere su versioni di JMP e in più situazioni in cui lo usi, vorremmo utilizzare quel riferimento esplicito alla tabella dei dati anziché alla tabella dei dati corrente. Quindi andrò avanti ed eseguirò questo. E questo ha cancellato la colonna di cui volevo sbarazzarmi. Restituito quel messaggio di script nel registro. Quindi ora permettetemi di cancellare il contenuto della finestra dell'editor di script. Estrarrò l'intera tabella di dati come matrice e la memorizzerò nella variabile m. Quindi a m verrà assegnato il risultato dell'invio di un messaggio alla tabella dati corrente. E quel messaggio è ottenere come matrice. Quindi lo eseguirò. E puoi vedere nel registro, o potresti passare sopra di me, che ora ho questa matrice. E la prima colonna contiene questi numeri davvero enormi. E, naturalmente, questo perché quando invio get come matrice a una tabella di dati in generale, eliminerà tutte le colonne numeriche. E questo includerà le date. Quindi il giorno qui viene trattato come numerico. Puoi dirlo dall'icona del tipo di modellazione, perché è continua. Il tipo di dati deve essere numerico. In realtà potresti anche, se lo ingrandisco, anche se sembra che il giorno contenga dei caratteri, è solo una formattazione. Quindi è giustamente giustificato perché è un numero. Quindi ottieni come matrice anche estratto quel valore. E se voglio fare calcoli su Cure Time - e in effetti, i calcoli che voglio fare comporteranno la ricerca di un valore minimo e massimo - non voglio questi grandi valori per la giornata in quella matrice. Quindi vado a una nuova riga. E starò attento. Voglio mantenere ciò che ho già: il codice che ho già inserito nella finestra visibile mentre lo passo, ma non voglio rifare tutto. Quindi starò molto attento a eseguire una riga alla volta. Per sbarazzarmi di quella prima colonna, userò la variabile m e la pedicerò con uno zero e uno. E se ricordi, quel pedice significa semplicemente non selezionare nessuna riga particolare. In altre parole, dammi tutte le righe nella prima colonna. E assegnerò a quella la matrice vuota, che sono solo le parentesi quadre senza nulla al loro interno. E ancora, per eseguire solo quella riga, posso evidenziare la riga e utilizzare uno qualsiasi dei metodi che utilizziamo per eseguire un intero script. Ma eseguirà solo la parte selezionata o evidenziata. Oppure sul tastierino numerico di una tastiera desktop standard, posso usare il tasto Invio sull'estrema destra. E quindi ciò che viene restituito al registro è solo la matrice vuota. Ma se ora passo con il mouse sopra m o se ho evidenziato m e l'ho eseguito, puoi vedere che ora abbiamo solo valori di Cure Time. Ci siamo sbarazzati di quella prima colonna con quei grandi numeri di data. Andrò su una nuova riga e guarderò alcune delle altre funzioni di matrice che possiamo usare. Quindi creerò una variabile, a, a cui verrà assegnato il risultato dell'utilizzo della funzione loc, LOC. E troverò le posizioni in questa matrice, m, dove i valori sono maggiori di E quando eseguo solo quella linea, trattiamo la matrice, m, come se fosse un vettore riga e contando dalla prima position e solo restituendo le posizioni, le singole posizioni pedice, di tutti gli elementi nella matrice che sono maggiori di Now, se voglio i valori effettivi, creerò una variabile chiamata avals. E firmerò che il risultato dell'indicizzazione della matrice memorizzata in m con la variabile a. E seguirò solo quella linea. E ci sono i valori effettivi del tempo di cura che superano E ovviamente, per semplificare questo script, se non avessi bisogno di memorizzare le posizioni di tutti quei valori, avrei potuto semplicemente fare un pedice-- fammi semplicemente copiare questo-- pedice della matrice m con la funzione loc. Non ho bisogno di questo passaggio aggiuntivo per memorizzare le posizioni e quindi utilizzarlo, a meno che non abbia qualche altro motivo per lavorare con le posizioni che avevo inizialmente memorizzato in un in questo esempio. Quindi la prossima cosa che voglio fare con questa matrice è calcolare alcuni valori trasformati. Inoltre, questa trasformazione prenderà ogni osservazione di Cure Time meno il minimo sull'intera tabella diviso per l'intervallo dei valori di Cure Time da massimo a minimo e lo moltiplicherà per Quindi è un po' come prendere la distanza ad ogni osservazione dalla cura minima tempo in proporzione all'intervallo. Questo illustra un altro vantaggio di lavorare con le matrici. Per trovare un valore minimo in un'intera tabella di dati, indipendentemente dal fatto che io stia eseguendo uno script o lavorando in modo interattivo, lavorare con le singole colonne nella tabella di dati richiederebbe molti passaggi per trovare quel valore minimo o il valore massimo. Ma lavorando con una matrice, posso farlo in una riga di codice molto breve. Quindi nella mia finestra dell'editor di script-- fammi andare avanti e cancellare il contenuto ora-- creerò una variabile minCT-- quindi tempo di cura minimo, e assegnerò a quella variabile il risultato dell'utilizzo di funzione min con m come argomento. E andrò avanti e seguirò quella linea. Quindi il valore minimo è E poi creerò anche una variabile maxCT. E gli assegnerò il risultato dell'utilizzo della funzione max con m come argomento. E seguirò solo quella linea. E questo è E ora posso usare queste variabili nel mio calcolo di questa trasformazione. Creerò una variabile, t, per memorizzare i valori di trasformazione. Fammi andare su una nuova linea. Quindi a t verrà assegnato il risultato dei tempi e quindi parentesi aperte per il numeratore m meno minCT chiudi parentesi il segno di divisione e quindi parentesi aperte per il denominatore, maxCT meno minCT. Quindi posso eseguire solo quella linea e quindi ottengo questi valori di trasformazione. Ogni osservazione meno il minimo come proporzione dell'intervallo dei valori del tempo di cura. Ora, questo è un sacco di cifre decimali. Non abbiamo davvero tanta precisione. Quindi possiamo effettivamente arrotondare questi valori. E andrò di nuovo su una nuova linea. Sovrascriverò i valori in t assegnando il risultato della funzione round a t. Potresti farlo in una nuova variabile se volessi mantenere l'originale. Ma digiterò t e poi l'operatore di assegnazione, la funzione round. Gli argomenti sono i primi, cosa sto arrotondando? Quindi sto arrotondando i valori memorizzati in t. E poi quante cifre decimali voglio? voglio zero. Ora, questo troncherà i valori nella matrice. Questo non è lo stesso della formattazione di una colonna di dati in modo che abbia solo zero posizioni decimali in cui i valori completi sono ancora archiviati in background. Quindi non sto formattando qui. In realtà sto troncando i valori. Andrò avanti e lo eseguirò. E ora ho i valori interi per i valori trasformati. Ora, se si desidera reinserire questi valori nella tabella dei dati del tempo di cura, è possibile scorrere la matrice e creare nuove colonne. Se volessi creare completamente una nuova tabella di dati, c'è una funzione molto semplice chiamata tabella. E ci sono argomenti facoltativi per nominare questa tabella e per nominare le colonne. Manterrò le cose semplici per questa dimostrazione semplicemente usando la variabile t come argomento come tabella. E quando lo eseguo, ottengo questa tabella senza titolo con nomi di colonne generici. Ma tutti quei valori di quella matrice di trasformazione sono stati popolati in questa tabella. E ancora, potrei specificare il nome e le intestazioni delle colonne come parte dell'argomento as table. Oppure potrei usare lo script per modificarlo dopo il fatto. Quindi abbiamo esaminato un paio di modi diversi per estrarre valori numerici da una tabella di dati, per colonna o per l'intera tabella di dati, tutte le colonne numeriche, l'intera tabella di dati e alcune manipolazioni che possiamo eseguire con le matrici.