Eines der Dinge, die ich vergessen habe zu erwähnen mein vorheriger Beitrag war, dass sich die Matrix-Suchmethode schlecht an Zeichendaten anpasst. Der Code in Legen Sie Operationen mit matrices.JSL fest enthält die Funktion MapString die eine aus Kleinbuchstaben bestehende Zeichenfolge in einen numerischen Wert umwandelt. Diese Zuordnung verlangsamt die Arbeit erheblich. In einem verwandten Beitrag , @Adi-B Ich habe nach der Durchführung einer Suche und Ersetzung für eine Datentabellenspalte gefragt. Auch hier handelt es sich um eine Zuordnung von einem String zu etwas anderem (in diesem Fall einem anderen String).
Dies führt zur Herausforderung dieses Monats: Wie lässt sich ein Wertesatz am schnellsten einem neuen Wertesatz zuordnen?
- Bei kontinuierlichen Daten ist es häufig sinnvoll, die Werte in Quantile zu gruppieren, wobei Dezile (dh 10 Gruppen) möglicherweise am häufigsten vorkommen. Schreiben Sie eine Funktion, QuantileGroup( inVec , quant ) , das einen Vektor und eine positive ganze Zahl größer als eins annimmt und die Quantilgruppe zurückgibt, zu der die Eingabewerte gehören. Zum Beispiel, wenn
inVec = [1,2,3,4,5,6,7,8,9] Und quant = 3
Die Funktion würde zurückkehren [1,1,1,2,2,2,3,3,3] .
Sie müssen entscheiden, wie Sie mit Werten umgehen, die über eine Quantilgruppengrenze hinausgehen, insbesondere wenn es Duplikate gibt.
- Beim Umgang mit vielen abgestuften kategorialen Daten ist es häufig sinnvoll, Ebenen mit geringer Anzahl in einer einzigen Ebene zusammenzufassen. Erstellen Sie eine Funktion aggregatLowCounts( inListe ) Dabei wird eine Eingabeliste mit kategorialen Werten verwendet und eine Liste zurückgegeben, die die Werte mit hohen Zählwerten sich selbst und die Werte mit niedrigen Zählwerten einer einzigen neuen Gruppe zuordnet. Ein Teil der Herausforderung besteht darin, den Grenzwert für niedrige Zählwerte zu bestimmen.
- In Bezug auf der oben erwähnte Beitrag , erstellen Sie eine Funktion suchen und Ersetzen( inListe , aaMap ) Das nimmt eine Liste von Zeichenfolgen und führt für jedes Element mithilfe eines assoziativen Arrays, das als zweites Argument bereitgestellt wird, eine Zuordnung von einer Teilzeichenfolge zu einer neuen Teilzeichenfolge durch. Diese Zuordnung kann eins-zu-eins oder viele-zu-eins sein.
- (Extra Credit) Kann das Durchsuchen einer Liste von Zeichenfolgen schneller gemacht werden? Ort ? Der Zweck von MapString war es, eine Zeichenfolge in eine Zahl umzuwandeln Loc sortiert , das eine binäre Suche verwendet, könnte verwendet werden. Loc sortiert ist deutlich schneller als Ort . Versuchen Sie, eine Funktion zu erstellen, locSortedString( stringList , inString ) das findet die Position der Zeichenfolge inString aus der sortierten Liste der Zeichenfolgen stringList . Es ist schwer vorstellbar, etwas schneller zu schaffen als Ort ohne a priori Kenntnis der möglichen Stringwerte, die auftreten können. Gehen Sie vor diesem Hintergrund davon aus, dass alle Zeichenfolgen aus der Wortliste stammen, die wir in verwendet haben Herausforderung 1 . Es ist unten beigefügt.
Viel Glück!