Ciao a tutti.
Ho del codice JSL che richiede molto tempo per essere eseguito per set di dati più grandi.
Il codice esegue un ciclo for all'interno di un ciclo for per popolare un elenco di condizioni univoche. Sto cercando un modo più veloce per farlo.
L'elenco ha molteplici scopi. In primo luogo, funge da contatore per quante condizioni univoche sono presenti in un set di dati e, in secondo luogo, utilizzo questo elenco per creare elenchi più piccoli, per popolare le colonne in una nuova tabella. Il modo in cui ciò viene fatto è convertire una stringa in un elenco separando ogni elemento con un ",".
Ho allegato un set di dati fittizio e il codice, che copre il primo "scopo" dell'elenco.
start=tick seconds();
dt = current data table();
dt << new column("concat_factors");
condition_list = {};
for(x=1, x<=nrows(dt),x++,
column(dt, "concat_factors")[x] =
char(column(dt, "X__2")[x]) || "," ||
char(column(dt, "X__11")[x]) || "," ||
char(column(dt, "X__12")[x]) || "," ||
char(column(dt, "X__15")[x]) || "," ||
char(column(dt, "X__4")[x]);
if(x==1,
insert into(condition_list, char(column(dt, "concat_factors")[x]));
);
if(x!=1,
found = 0;
for(y=1,y<=nitems(condition_list),y++,
if(char(condition_list[y]) == char(column(dt, "concat_factors")[x]),
found = 1;
);
);
if(found == 0,
insert into(condition_list, char(column(dt, "concat_factors")[x]));
)
);
);
end=tick seconds();
runtime=end-start;
print(runtime);
Grazie in anticipo!
Fr. Anders
Prova questo approccio:
start=tick seconds();
dt = current data table();
dt << new column("concat_factors");
for each row(
column(dt, "concat_factors") =
char(column(dt, "X__2")) || "," ||
char(column(dt, "X__11")) || "," ||
char(column(dt, "X__12")) || "," ||
char(column(dt, "X__15")) || "," ||
char(column(dt, "X__4"));
);
condition_list = Associative Array( column(dt, "concat_factors") ) << Get Keys;
end=tick seconds();
runtime=end-start;
print(runtime);
Penso che l'ottimizzato Per ogni riga() funzione potrebbe essere più veloce. Inoltre, sembra che tu passi molto tempo solo a controllare un nuovo valore univoco. Il Array associativo() costrutto è molto efficiente nell'aggiungere solo chiavi univoche.