Existe-t-il un moyen rapide de créer une grande liste sans boucle for ?De nombreux langages de programmation ont une forme.
Par exemple pour faire un liste de 1 à 100 :
list = 1:100,
ou
list = range(1,100)
ou
list = {1..100}
ou
list = seq(1,100)
Fais-moi savoir! Je n'ai rien trouvé dans le guide de script.
Re : Existe-t-il un moyen rapide de créer une grande liste sans boucle for ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Cet outil de profileur vous sera utile.Merci de l'avoir partagé.
Il semble que vous ayez raison, la raison pour laquelle il ne semble pas fonctionner plus rapidement est qu'il y a des goulots d'étranglement plus importants dans le code.Il semble que le code matriciel '::' s'exécute plus rapidement que la boucle for qui est intuitive.J'obtiens cela en comparant les % de la ligne 10+11 aux % de la ligne 31.
Mon code actuel ne comparera jamais de grands ensembles de données, mais j'étais toujours curieux car je prévois de créer des scripts similaires pour de plus grandes quantités de données et se débarrasser des boucles for est un moyen sûr et général de rendre le code plus rapide.
Re : Existe-t-il un moyen rapide de créer une grande liste sans boucle for ?Beau test de performances.
JSL dispose d'un profileur qui peut aider à répondre aux questions de performances :

Je l'ai exécuté pour obtenir ceci :

ce qui me dit que définir les valeurs dans le tableau associatif est un goulot d'étranglement dans ce code.(ligne 10 contre ligne 11.) (La ligne 23 inclut probablement l'ouverture du journal la première fois, ignorez cela ; 42 est plus représentatif.)
La grande classe n'a que 40 lignes.Si vous aviez beaucoup plus de lignes (10 000 ?), vous pourriez voir d'autres goulots d'étranglement.N'appelez pas temparray<
Il semble que vous essayiez de créer une table de recherche de petits entiers consécutifs pour chaque valeur unique de la colonne.Il existe peut-être un moyen intelligent de procéder, mais je ne le vois pas pour le moment.Peut-être que quelqu'un d'autre le fera... peut-être une opération de jointure de base de données ?
Re : Existe-t-il un moyen rapide de créer une grande liste sans boucle for ?Merci, c'est utile.J'espérais que cela accélérerait mon code, mais j'ai l'impression que la boucle for a des vitesses similaires, ce qui me surprend.Aucune suggestion?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
t1 = tick seconds();
numberarray = Function({list},
temparray = Associative Array(list);
tempnum = nitems(temparray << Get Keys);
tempitems = temparray << Get Keys;
templist = {};
For(l=1, l<=tempnum, l++, insertinto(templist, l));
temparray = Associative Array(tempitems, templist);
//return(temparray)
);
for(i=1, i<=100,i++,
array = numberarray( Column(dt, 1) );
array2 = numberarray( Column(dt, 2) );
array3 = numberarray( Column(dt, 3) );
array4 = numberarray( Column(dt, 4) );
array5 = numberarray( Column(dt, 5) ););
t2 = tick seconds();
Print( Concat( Char( t2 - t1 ), " seconds." ) );
t1 = tick seconds();
numberarray = Function({list},
temparray = Associative Array(list);
tempnum = nitems(temparray << Get Keys);
tempitems = temparray << Get Keys;
temparray = Associative Array(tempitems, 1::tempnum);
);
for(i=1, i<=100,i++,
array = numberarray( Column(dt, 1) );
array2 = numberarray( Column(dt, 2) );
array3 = numberarray( Column(dt, 3) );
array4 = numberarray( Column(dt, 4) );
array5 = numberarray( Column(dt, 5) ););
t2 = tick seconds();
Print( Concat( Char( t2 - t1 ), " seconds." ) );
Re : Existe-t-il un moyen rapide de créer une grande liste sans boucle for ?
a=3;
b=9;
AsList(a::b)[1]
Résulte en:
{3, 4, 5, 6, 7, 8, 9}
plusieurs choses se passent ici : a::b fait une matrice d'une ligne : [3 4 5 6 7 8 9]
AsList( ... ) convertit la matrice en une liste de listes (car elle est en réalité bidimensionnelle, l'une des dimensions n'étant que 1.
[1] extrait la liste interne.
Peut-être voulez-vous simplement la matrice plutôt que la liste.Si vous êtes intéressé par le code rapide, utilisez les fonctions matricielles intégrées lorsque vous le pouvez.
Il ne s'agit pas d'un itérateur magique provenant d'un autre langage de programmation ; il volonté créez la matrice complète et la liste en mémoire, vous ne voudrez donc probablement pas dresser une liste d'un milliard d'éléments.