Tabelle di ricerca utilizzando JSLCIAO,
Ho scritto del codice per implementare una tabella di ricerca rudimentale per un set di dati di tensione/tempo. Ma a causa delle dimensioni del mio set di dati, si sta bloccando.
In breve, potrebbero esserci circa 1000 righe (intervalli di tempo) per ogni esecuzione e ci sono circa 1500 esecuzioni, quindi 1,5 milioni di righe in totale. In poche parole, sto facendo quanto segue nel mio codice prima di iniziare a utilizzare la tabella di ricerca:
- Set di dati di processo
- Calcola dV/dt dai dati
- Utilizzare la tabella per trovare il picco dV/dt per ogni singola analisi e creare una nuova tabella dati denominata dt2.
- Creare una nuova colonna nel set di dati per scrivere il valore dV/dt di picco accanto a ciascun valore dV/dt in ogni analisi.
A questo punto il mio codice inizia a scorrere riga per riga attraverso dt1, effettuando un controllo incrociato dei diversi parametri di test che definiscono l'esecuzione # rispetto a dt2 e trovando il picco dV/dt e restituendolo a quella riga in dt1.
Il mio codice per la ricerca nella tabella di ricerca è simile al seguente:
Current Data Table( dt1 );<BR /><BR />For Each Row(
v = :sample;
w = :temp;
x = :cell;
y = :vicl;
z = :v_bg;<BR />// Find the row in dt2 that matches v/w/x/y/z
row = dt2 << get rows where( :sample == v & :temp == w & :cell == x & :vicl == y & :v_bg == z);<BR />// get values from the dV/dt peak column in dt2
col = Column(dt2, "dvdt_abs_max") << getValues;<BR />// pick out the value of row[n] from that column and save into the active row in dt1
:dVdt_peak = col[row]
);
Questo codice ha funzionato quando l'ho testato per un set di piccole dimensioni, ma una volta ottenuto il set di dati completo, è apparsa la ruota che gira infinita. Sono abbastanza nuovo in questo e sono sicuro che ci deve essere un modo migliore e più efficiente per farlo, semplicemente non l'ho capito.
Grazie
Personalizzazione di massaRi: Tabelle di ricerca utilizzando JSLGrazie per l'indicazione @David_Burnham , me lo ricorderò la prossima volta che mi ritroverò a utilizzare "For Each Row".
Ri: Tabelle di ricerca utilizzando JSLQuesta funzione è esattamente quello che stavo cercando. Grazie @txnelson !
Ri: Tabelle di ricerca utilizzando JSLVedere @txnelson , ma nota anche che, sebbene "For Each Row" sia bello da scrivere, la mia esperienza è che viene eseguito molto lentamente.Un ciclo for standard, ad esempio 'For (i=1,i<=nrows(dt),i++') è un metodo molto più veloce per scorrere le righe di una tabella.
Ri: Tabelle di ricerca utilizzando JSLStai davvero costringendo JMP a farlo nel modo più duro.Il modo più semplice ed efficace per gestire questo problema è utilizzare la piattaforma di aggiornamento.Dovrebbe gestire la ricerca su righe da 1,5 milioni senza problemi
dt << Update(
With( dt2 ),
Match Columns( :sample == :sample, :temp == :temp, :cell == :cell, :vicl == :vicl, :v_bg == :v_bg ),
Add Columns from Update Table( :dvdt_abs_max )
);
Ri: Tabelle di ricerca utilizzando JSLSe può essere d'aiuto, il motivo di questo codice è che posso filtrare ed eliminare le righe in base al fatto che ricadano sotto una soglia che è una funzione del picco dV/dt.