Salut tout le monde.
J'ai du code JSL qui prend beaucoup de temps à s'exécuter pour des ensembles de données plus volumineux.
Le code exécute une boucle for dans une boucle for pour remplir une liste de conditions uniques. Je cherche un moyen plus rapide de le faire.
La liste a plusieurs objectifs. Premièrement, il sert de compteur pour le nombre de conditions uniques présentes dans un ensemble de données, et deuxièmement, j'utilise cette liste pour créer des listes plus petites, pour remplir des colonnes dans une nouvelle table. Pour ce faire, vous devez convertir une chaîne en liste en séparant chaque élément par un ”,”.
J'ai joint un ensemble de données factices ainsi que le code, couvrant le premier "objectif" de la liste.
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);
Merci d'avance!
Br. Anders
Essayez cette approche :
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);
Je pense que l'optimisé Pour chaque ligne() fonction peut être plus rapide. De plus, il semble que vous passiez beaucoup de temps à rechercher une nouvelle valeur unique. Les Tableau associatif() construct est très efficace pour n'ajouter que des clés uniques.