Il modo più veloce per scorrere una tabella datiCiao,
Abbiamo una tabella JMP con milioni di righe (dati immagine) e ogni operazione è costosa e richiede molto tempo. Tuttavia, dobbiamo aggiungere una nuova colonna che verrà calcolata a partire dalle altre colonne.
Qual è il modo più veloce per farlo con grandi set di dati? Attualmente, stiamo utilizzando "Set Formula" sulla colonna, ma l'applicazione richiede molto tempo e, inoltre, la formula deve essere modificata più volte durante l'analisi. Dovremmo usare vettori "Get Values" o qualcosa del genere? Ho visto anche la funzione "for each rows". Apprezzerei qualsiasi feedback e suggerimento.Automazione e scriptingAnalisi e modellazione dei dati di baseRe: Il modo più veloce per scorrere una tabella datiSpesso, abbandonare il tradizionale JSL riga per riga a favore dell'utilizzo di operazioni su matrici si traduce in un'elaborazione più rapida. Tuttavia, sarebbe utile se potessi fornire un esempio delle formule effettivamente utilizzate.
Re: Il modo più veloce per scorrere una tabella datiCiao,
Grazie per la risposta.
Per aggiungere ulteriore contesto: di seguito è riportato uno script con un esempio della formula che utilizzo. In base alle coordinate X/Y sull'immagine, la divido in zone, 20 in totale alla mia data reale. Se la classificazione delle zone non è corretta, modificherò la formula, motivo per cui dico che useremo spesso formule fisse.
dt = New Table( "Reprex",
Add Rows( 1000000 ),
New Column( "X", Numeric, Continuous, Formula( Random Integer( 0, 200 ) ) ),
New Column( "Y", Numeric, Continuous, Formula( Random Integer( 0, 200 ) ) )
);
R_debut_X = 10;
largeur = 50;
ecart_X = 5;
debut_Y = 20;
hauteur = 30;
ecart_Y = 5;
// Slow way: row formula
dt << New Column( "Zone_slow", Character,
Formula(
If( R_debut_X < :X <= R_debut_X + largeur & debut_Y < :Y <= debut_Y + hauteur, "Zone 1",
R_debut_X + largeur + ecart_X < :X <= R_debut_X + 2*largeur + ecart_X & debut_Y < :Y <= debut_Y + hauteur, "Zone 2",
"Other"
)
)
);
Re: Il modo più veloce per scorrere una tabella dati@txnelson ha ragione, una matrice potrebbe migliorare la velocità. Assicurati di usare <
dt = New Table( "Reprex",
Add Rows( 1000000 ),
New Column( "X", Numeric, Continuous, Formula( Random Integer( 0, 200 ) ) ),
New Column( "Y", Numeric, Continuous, Formula( Random Integer( 0, 200 ) ) )
);
R_debut_X = 10;
largeur = 50;
ecart_X = 5;
debut_Y = 20;
hauteur = 30;
ecart_Y = 5;
start = hptime();
// Slow way: row formula
dt << New Column( "Zone_slow", Character,
Formula(
If( R_debut_X < :X <= R_debut_X + largeur & debut_Y < :Y <= debut_Y + hauteur, "Zone 1",
R_debut_X + largeur + ecart_X < :X <= R_debut_X + 2*largeur + ecart_X & debut_Y < :Y <= debut_Y + hauteur, "Zone 2",
"Other"
)
)
);
dt<
<RUNFORMULAS></RUNFORMULAS>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Craige_Hales_0-1758807317326.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Craige_Hales_0-1758807317326.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="Craige_Hales_0-1758807317326.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/83489iE50BBC18E746B0D5/Craige_Hales_0-1758807317326.png" role="button" title="Craige_Hales_0-1758807317326.png" alt="Craige_Hales_0-1758807317326.png" /></span></SPAN></SPAN></P> <BR /> <P>Il valore risultante utilizza il valore di verità 0 o 1 in cmatxy1,2 per costruire il valore 0, 1 o 2 per other, zone1, zone2. Potresti probabilmente comprimere alcune delle istruzioni della matrice per renderle ancora più veloci, se questo è importante.</P> <BR />
Re: Il modo più veloce per scorrere una tabella datiGrazie mille, ora è molto più veloce!