Converti lista in matriceQual è il modo più rapido per convertire una lista: {"a", 1, 2, "b"} in una matrice: [. 1 2 .]?
Mi aspetto di poter semplicemente scorrere tutti gli elementi, ma spero che ci sia un modo più rapido poiché lo farò molte migliaia di volte nella mia applicazione, con ogni elenco contenente centinaia di elementi.
Ri: Converti lista in matriceBOOYAH!, Dichiarare la vittoria e tornare a casa! Sulla mia tabella di dati con 30.000 righe e 150 colonne, la mia routine è passata da un tempo di esecuzione di 8,5 minuti scorrendo ogni colonna su ogni riga e controllando i limiti per quella colonna, a un tempo di esecuzione di 4,5 SECONDI controllando un'intera riga in un colpo solo! Come ho detto, BOOYAH!
Ri: Converti lista in matriceNon sono sicuro della gestione della memoria qui. Ma poiché NumberColBox non viene disegnato o memorizzato in una variabile, non penso che utilizzi o blocchi quantità significative di memoria.
Sembra anche ridimensionarsi in modo lineare: se eseguito in loop 10000x, 100000x e 1000000x, impiega rispettivamente 0,27, 2,7 e 26,7 secondi. Nessuna differenza nell'utilizzo della memoria.
Applicato a questo piccolo elenco, la casella dei numeri è circa 30 volte più veloce dell'approccio della tabella dei dati pubblicato sopra. Per elenchi molto lunghi (potrebbe esserci un limite massimo per il numero di elementi che un NumberColBox può contenere), il metodo della tabella dati potrebbe essere più efficiente.
Ri: Converti lista in matricePer essere perfetto, ho fatto questo:
data = shape(Number Col Box("", dt[1,0]) << get as matrix, 1, N Cols(dt));Ora, date matrici costruite in modo simile per le specifiche LSL/USL, posso fare:
If( max(data < LSL) > 0 | max(data > USL) > 0, "FAIL", "PASS")
per controllare una riga di dati rispetto ai limiti specificati nelle proprietà della colonna, senza dover scorrere le colonne per ogni riga, prendendo un processo mXn e trasformandolo in un processo m+n.
Ri: Converti lista in matricePraticamente perfetto! Domanda, cosa succede al Number Col Box? Rimane in memoria o viene creato solo abbastanza a lungo per inviare il messaggio?
Ri: Converti lista in matriceQuesto è abbastanza veloce:
MyList = {"a", 1, 2, "b"};
Mat = Number Col Box("", MyList) << get as matrix;Ri: Converti lista in matriceIn realtà ho bisogno dei valori mancanti. A volte un valore mancante non è un problema, ad esempio un test viene aggiunto successivamente durante la creazione di colonne aggiuntive nel set di dati. I dati precedenti non sono fuori specifica per i test che non sono stati eseguiti. Sfortunatamente, a volte i dati mancanti sono un problema, il test si interrompe ma i risultati precedenti sono conformi alle specifiche. Non ho ancora capito come affrontarlo, ma sto facendo progressi.
Ri: Converti lista in matriceGuardando la tua domanda originale, volevi una matrice di [1,2].Ho aggiunto in una dichiarazione per eliminare i valori mancanti
MyList = {"a", 1, 2, "b"} ;
dt = New Table("Temp",
New Column("C",Numeric,values(MyList)),
"Private"
);
dt << select where( ismissing(:c)) << delete rows;
Mat = dt << get as matrix;
Close(dt,"No Save");
Show(Mat);Ri: Converti lista in matriceGrazie, ci proverò.
Ri: Converti lista in matrice@MarkDayton ,
Non so se usare una tabella dati va bene? se sì, ecco qua. Poiché la tabella dei dati è privata, mi aspetto che sia più che ragionevolmente veloce per centinaia di valori
MyList = {"a", 1, 2, "b"} ;
dt = New Table("Temp",
New Column("C",Numeric,values(MyList)),
"Private"
);
Mat = dt << get as matrix;
Close(dt,"No Save");
Show(Mat);