Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Hallo allerseits,
Ich habe eine Liste mit Zahlen und möchte diese in Zeichen umwandeln. Gibt es eine Möglichkeit, dies ohne Verwendung einer Schleife zu tun? Ich konnte die richtige Funktion nicht finden.
Danke für Ihre Hilfe!
SkriptingBetreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Hier ist ein kleines Skript, das eine Funktion erstellt, die das tut, was Sie wollen.Sie können entweder die Funktion in Ihrem Code definieren und verwenden oder die 4 Anweisungen im offenen Code verwenden, um die Konvertierung durchzuführen.
Names Default To Here( 1 );
theList = {7,8,9};
NumListToChar = Function( {myList},
{defaultlocal},
dtx = New Table( "x", New Column( "y", values( myList ) ), private );
dtx:y << data type( character );
myList = dtx:y << get values;
Close( dtx, nosave );
Return( myList );
);
theList = NumListToChar( theList );Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Danke für deine Antwort @ txnelson es ist in der Tat das, wonach ich gesucht habe.
Ich frage mich nur, was zwischen einer Schleife und einer Funktion, bei der eine Tabelle erstellt wird, am schnellsten ist. Irgendeine Idee?
Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Neu in JMP 16 ist das Für jede () Funktion Dies iteriert über einen Container - Liste, Matrix oder assoziatives Array -, um eine Operation für jedes Element auszuführen.
In diesem Beispiel wird gezeigt, wie Sie damit Ihre Zahlenliste in eine Liste von Zeichenfolgen konvertieren können.
Names Default To Here( 1 );
theList = {7, 8, 9};
For Each( {value, index}, theList, theList[index] = Char( value ) );
Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Vielen Dank @ Jeff_Perkinson !
Ich habe einige Simulationen nur aus Neugier durchgeführt, um die Ausführungszeit jeder Lösung zu vergleichen, und es scheint, dass die für jede Funktion im Durchschnitt die schnellste ist!
Also werde ich das auswählen, obwohl die Funktion von @ txnelson funktioniert auch sehr gut.
Danke euch beiden:)
Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Hier ist ein schnelles Timing-Programm für die drei Methoden for-Schleife für jede und benutzerdefinierte Funktion unter Verwendung der Datentabelle.
Names Default To Here( 1 );
listsize=1000000;
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
NumListToChar = Function( {myList},
{defaultlocal},
dtx = New Table( "x", New Column( "y", values( myList ) ), private );
dtx:y << data type( character );
myList = dtx:y << get values;
Close( dtx, nosave );
Return( myList );
);
start = HP Time();
For Each( {value, index}, theList, theList[index] = Char( value ) );
foreachloop = HP Time() - start;
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
start = HP Time();
theList = NumListToChar( theList );
customfunction = HP Time() - start;
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
start = HP Time();
For( i = 1, i <= N Items( theList ), i++,
theList[i] = Char( theList[i] )
);
forloop = HP Time() - start;
show(foreachloop, customfunction, forloop);
Für mich mit der oben gezeigten Listengröße sind die Ergebnisse zwischen den drei Methoden sehr ähnlich:
foreachloop = 1106974;
customfunction = 1077862;
forloop = 1400643;
Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Jeffs Antwort erweitern
Unterschiedliche Gemeinkosten schaden bei kleinen Größen und helfen bei großen Größen.
dt = New Table( "Untitled 3",
Add Rows( 0 ),
New Column( "size", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "for", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "foreach", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "custom", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) )
);
NumListToChar = Function( {myList},
{defaultlocal},
dtx = New Table( "x", New Column( "y", values( myList ) ), private );
dtx:y << data type( character );
myList = dtx:y << get values;
Close( dtx, nosave );
Return( myList );
);
For( listsize = 1, listsize < 1e7, listsize *= 2,
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
start = HP Time();
For Each( {value, index}, theList, theList[index] = Char( value ) );
foreachloop = HP Time() - start;
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
start = HP Time();
theList = NumListToChar( theList );
customfunction = HP Time() - start;
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
start = HP Time();
For( i = 1, i <= N Items( theList ), i++,
theList[i] = Char( theList[i] )
);
forloop = HP Time() - start;
Show( foreachloop, customfunction, forloop );
dt << addrows( 1 );
dt:size[N Rows( dt )] = listsize;
dt:for[N Rows( dt )] = forloop / 1e6;
dt:foreach[N Rows( dt )] = foreachloop / 1e6;
dt:custom[N Rows( dt )] = customfunction / 1e6;
Wait( 0.1 ); // so it shows on display
);Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Danke für die zusätzlichen Informationen @ Jeff_Perkinson und @Craige_Hales !
Wir lernen immer viel mit der Community !!
Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Schöne Darstellung der größenabhängigen Leistung der verschiedenen Funktionen. Ich verwende immer noch JMP 15 und kann es nicht verwenden Für jedes() Noch, aber um Jeffs Timing-Übung weiter zu erweitern, werfe ich zwei weitere Funktionen ein, die das gleiche Ergebnis liefern.
Repeat(k = 0; {k++; Char( theList[k] )}, listsize);
Words( Substr( Char( theList ), 2, Length( Char( thelist ) ) - 2 ), ", " );

Die For-Schleife, die für kleine Listen am schnellsten ist, wird von Wörtern mit einer Größe> 50, der Umleitungsfunktion für Datentabellen mit einer Größe von> 1000 und einer Wiederholung mit einer Größe von> 30000 übertroffen.
Ich war ein wenig überrascht zu sehen, dass Wörter für Größen> 50 die schnellsten blieben, ungefähr doppelt so schnell bei Millionen von "Wörtern".
Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Wow, ich habe nach einer Lösung gesucht und so viele! JMP ist unglaublich! Danke an alle!
Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?@ DonMcCormack - - Herausforderung !
Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Vielen Dank @Craige_Hales ! Ich mag das. Lassen Sie mich sehen, ob ich es in die nächste Herausforderung einarbeiten kann. Sollten wir versuchen, eine Iteration zu vermeiden oder nur Zum (und seine Derivate)?Eine Möglichkeit, Iterationen zu vermeiden, besteht in der Auswertung von Ausdrücken. Wenn Sie mit diesem Ansatz nicht vertraut sind, schauen Sie sich das an @Joseph Morgan 's Discovery-Tutorial, Punkt 1 . Für das obige Problem könnte die Funktion ungefähr so aussehen:
convertNumberToCharacter = Function({inList},{i=1,outList={}},
outList[1::N Items(inList)] = Expr(Char(inList[i++]));
Eval List(outList);
);
/* You can check it out using the code below.
tStart = HP Time();
alist = As List(J(10000,1,Random Normal(1e6,1e5)));
newList = convertNumberToCharacter(alist);
Print((HP Time()-tStart)/1e6);
*/
Ich habe dies in einigen der Herausforderungen versucht und obwohl es kurz und bündig ist, dauert es tendenziell länger und ist schwerer zu verstehen (es sei denn, Sie sind mit dem Umgang mit Ausdrücken ziemlich vertraut).
Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?Es gibt auch Transform Each, das hier etwas schneller zu sein scheint als For Each.
theList = Transform Each( {value}, theList, Char( value ) );
Betreff: Wie konvertiere ich eine numerische Liste in eine Zeichenliste?@ DonMcCormack Die Vanille-For-Schleife ist je nach Problemgröße sowohl am schnellsten als auch am langsamsten. Ich bin Ja wirklich überrascht @Frau Die wortbasierte Lösung bietet bei großen Größen eine hervorragende Leistung. Ich mag die unerwarteten Antworten, die eine solche Funktion in JMP zeigen. Ich bin ein bisschen überrascht, denn jeder ist schneller als bei einer bestimmten Größe. Das mag ich auch gerne.
Ich würde nicht versuchen, etwas zu vermeiden. Ich mag Ihren aktuellen Plan für eine Diskussion und nicht einen klaren Gewinner. Hier sind einige Ideen für Diskussionsstarter:
- Wenn Sie N Listen konvertieren müssten und alle M Elemente hätten, wie wirken sich N und M auf den Code aus, den Sie schreiben würden? Berücksichtigen Sie nicht nur die Geschwindigkeit, sondern auch die Korrektheit und Wartungsfreundlichkeit.
- Welche Ideen scheinen für Maschinen mit eingeschränktem Speicher am besten zu sein?
- Wie würden Sie "NaN" anstatt "." Zeigen?
- Wie würde eine Allzweckroutine aussehen? Wie würden Sie es nennen, wenn es in JMP eingebaut wäre?