で言い忘れたことの一つが私の前の投稿それは、行列検索方法が文字データにあまり適応しないということでした。 のコードmatrices.JSL を使用した集合演算機能が含まれていますマップ文字列小文字からなる文字列を数値に変換します。 このマッピングにより処理速度が大幅に低下します。 関連記事で、 @アディBデータ テーブルの列に対する検索と置換の実行について質問されました。 ここでも、ある文字列から別のもの (この場合は別の文字列) へのマッピングを扱っています。
これは今月の課題につながります。「ある値のセットを新しい値のセットにマッピングする最速の方法は何ですか?」
- 連続データの場合、値を分位数にグループ化することが合理的であることが多く、十分位数 (つまり、10 グループ) が最も一般的である可能性があります。 関数を書いて、分位グループ(インベック、量的) 、ベクトルと 1 より大きい正の整数を受け取り、入力値が属する分位グループを返します。 たとえば、次の場合
インベック= [1,2,3,4,5,6,7,8,9]そして量的= 3
関数は戻ります[1,1,1,2,2,2,3,3,3] 。
特に重複がある場合、分位グループの境界をまたぐ値を処理する方法を決定する必要があります。
- 多くのレベル化されたカテゴリ データを扱う場合、カウントの少ないレベルを 1 つのレベルに集約することが合理的であることがよくあります。 関数を作成するaggregateLowCounts(リスト内)これはカテゴリ値の入力リストを受け取り、カウントの高い値をそれ自体にマップし、カウントの低い値を 1 つの新しいグループにマップするリストを返します。 低いカウントのカットオフ値をどのように決定するかが課題の一部です。
- を参照してください上記の投稿、関数を作成しますfindAndReplace(リスト内、 aaマップ)これは文字列のリストを受け取り、項目ごとに、2 番目の引数として指定された連想配列を使用して、1 つの部分文字列から新しい部分文字列へのマッピングを実行します。 このマッピングは 1 対 1 または多対 1 の場合があります。
- (おまけ) 文字列のリストの検索をもっと速くできるかロック? の目的マップ文字列文字列を数値に変換することでしたので、ロックソート済み二分探索を使用する、を使用することができます。 ロックソート済みよりもかなり高速ですロック。 関数を作成してみると、 locSortedString(文字列リスト、文字列内)文字列の位置を見つける文字列内ソートされた文字列リストから文字列リスト。 これよりも速く何かを作成することを想像するのは困難ですロック発生する可能性のある文字列値についての事前の知識がありません。 これを念頭に置いて、すべての文字列が、で使用した単語リストから取得されると仮定します。チャレンジ 1 。 以下に添付します。
幸運を!