Gibt es eine schnelle Möglichkeit, eine große Liste ohne for-Schleife zu erstellen?Viele Programmiersprachen haben irgendeine Form.
Zum Beispiel um eine zu machen Liste von 1 bis 100:
list = 1:100,
oder
list = range(1,100)
oder
list = {1..100}
oder
list = seq(1,100)
Lass es mich wissen! Ich konnte im Scripting-Guide nichts finden.
Betreff: Gibt es eine schnelle Möglichkeit, eine große Liste ohne for-Schleife zu erstellen?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Dieses Profiler-Tool wird sich als nützlich erweisen.Danke fürs Teilen.
Sie scheinen Recht zu haben. Der Grund dafür, dass es nicht schneller zu laufen scheint, liegt darin, dass der Code größere Engpässe aufweist.Es scheint, dass der „::“-Matrixcode schneller läuft als die for-Schleife, was intuitiv ist.Das erhalte ich, wenn ich % in Zeile 10+11 mit % in Zeile 31 vergleiche.
Mein aktueller Code kann nie große Datenmengen vergleichen, aber ich war trotzdem neugierig, weil ich davon ausgehe, dass ich ähnliche Skripte für größere Datenmengen erstellen würde und dass das Entfernen von for-Schleifen eine allgemein sichere Möglichkeit ist, Code schneller zu machen.
Betreff: Gibt es eine schnelle Möglichkeit, eine große Liste ohne for-Schleife zu erstellen?Schöner Leistungstest.
JSL verfügt über einen Profiler, der bei der Beantwortung von Leistungsfragen helfen kann:

Ich habe es ausgeführt, um Folgendes zu erhalten:

was mir sagt, dass das Setzen der Werte in das assoziative Array ein Engpass in diesem Code ist.(Zeile 10 vs. Zeile 11.) (Zeile 23 beinhaltet wahrscheinlich das erste Öffnen des Protokolls, ignorieren Sie das; 42 ist repräsentativer.)
Die große Klasse hat nur 40 Zeilen.Wenn Sie viel mehr Zeilen hätten (10.000?), könnten andere Engpässe auftreten.Rufen Sie temparray<
Es sieht so aus, als würden Sie versuchen, eine Nachschlagetabelle mit kleinen aufeinanderfolgenden Ganzzahlen für jeden eindeutigen Wert in der Spalte zu erstellen.Es gibt vielleicht einen cleveren Weg, dies zu tun, aber ich sehe ihn im Moment nicht.Vielleicht wird es jemand anderes tun ... vielleicht eine Datenbankbeitrittsoperation?
Betreff: Gibt es eine schnelle Möglichkeit, eine große Liste ohne for-Schleife zu erstellen?Danke, das ist hilfreich.Ich hatte gehofft, dass dies meinen Code beschleunigen würde, aber ich habe das Gefühl, dass die for-Schleife ähnliche Geschwindigkeiten hat, was mich überrascht.Irgendwelche Vorschläge?
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." ) );
Betreff: Gibt es eine schnelle Möglichkeit, eine große Liste ohne for-Schleife zu erstellen?
a=3;
b=9;
AsList(a::b)[1]
Ergebnisse in:
{3, 4, 5, 6, 7, 8, 9}
Hier passieren mehrere Dinge: a::b erstellt eine Matrix aus einer Zeile: [3 4 5 6 7 8 9]
AsList( ... ) wandelt die Matrix in eine Liste von Listen um (da sie eigentlich zweidimensional ist und eine der Dimensionen nur 1 ist).
[1] extrahiert die innere Liste.
Vielleicht möchten Sie nur die Matrix und nicht die Liste.Wenn Sie an schnellem Code interessiert sind, nutzen Sie nach Möglichkeit die integrierten Matrixfunktionen.
Dies ist kein magischer Iterator aus einer anderen Programmiersprache; Es Wille Erstellen Sie die vollständige Matrix und Liste im Speicher, sodass Sie wahrscheinlich keine Liste mit einer Milliarde Elementen erstellen möchten.