問題タブ [subset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - ルールによるサブセット生成
データベースに 5000 人のユーザーがいるとします。ユーザー行には、性別列、出身地列、ステータス (既婚/未婚) 列があります。
これらの条件を満たすランダムなサブセット (100 人のユーザーとしましょう) を生成する方法:
- 40% が男性、60% が女性であること
- 50% はアメリカ生まれ、20% はイギリス生まれ、20% はカナダ生まれ、10% はオーストラリア生まれ
- 70% は結婚すべきで、30% はそうではありません。
これらの条件は独立しています。つまり、次のようにすることはできません。
- (0.4 * 0.5 * 0.7) * 100 = 米国で生まれ、既婚の男性ユーザー 14 人
- (0.4 * 0.5 * 0.3) * 100 = 米国生まれの未婚の男性ユーザー 6 人。
この世代にアルゴリズムはありますか?
algorithm - 各グループから 1 つの要素を含むすべての組み合わせの積の合計
m 個の空でない個別のセット (Z[ 1 ]、Z[ 2 ]、...、Z[ m ] とラベル付け) がある場合、それぞれの要素が 1 つだけ存在するすべての可能なサブセットの合計を計算することを目指します。設定。各サブセットのサイズは、そのメンバーの積になるように定義されています。例えば:
Z[ 1 ] = {1,2,3}
Z[ 2 ] = {4,5}
Z[ 3 ] = {7,8}
結果は次のようになります。
1*4*7 + 1*4*8 + 1*5*7 + 1*5*8 + 2*4*7 + 2*4*8 + 2*5*7 + 2*5*8 + 3*4*7 + 3*4*8 + 3*5*7 + 3*5*8 = 810
これは (任意の言語で) コーディングするのは簡単ですが、これは有名な部分集合和問題の言い換えですか? そうでない場合は、この合計を計算する多項式時間アルゴリズムを提供してください (疑似コードまたは Python が推奨されます!)。多項式時間アルゴリズムが存在しない場合は、その理由を説明してください。
r - 文字列とのOR条件を使用したRでのサブセット化
約40列のデータフレームがあります。2番目の列であるdata[2]には、残りの行データで説明されている会社の名前が含まれています。ただし、会社名は年によって異なります(2009年のデータは09で、2010年は何もありません)。
両方の年を同時に取得できるように、データをサブセット化できるようにしたいと思います。これが私がやろうとしていることの例です...
基本的に、サブセット関数内でOR演算子を使用するのに問題があります。
しかし、私は他の選択肢を試しました:
おそらく、文字列関数を使用してそれを行う簡単な方法がありますか?
どんな考えでも感謝されるでしょう。
xml - XSLTを使用して、識別子のみを持つ要素のサブセットである情報を取得して並べ替える方法は?
XSLTを初めて使用しますが、次の問題を解決できません。
私はこのようなxmlファイルを持っています:
そして私はこれを作りたい:
ご覧のとおり、アイデアは、それぞれの情報を取得してIDのサブセットを「完成」させ、で指定された順序に従ってIDを並べ替えること<data>
です。
<data>
子ノードがたくさんあることに注意してください。
また、IDのサブセットから要素に関する情報を含むノードを分離しています。<data>
これは、多くのサブセットがあり、「どこでも」情報を繰り返したくないためです。
前もって感謝します。
r - グループ ID でデータをサブセット化するための for ループのより高性能な代替手段は何ですか?
私の研究で遭遇する繰り返し分析パラダイムは、すべての異なるグループ ID 値に基づいてサブセット化し、各グループに対して順番に統計分析を実行し、さらに処理/要約するために結果を出力マトリックスに入れる必要があるというものです。
通常、R でこれを行う方法は次のようなものです。
これでうまくいきましたが、データのサイズと作業しているグループの数によっては、最大 3 日かかる場合があります。
並列処理に分岐する以外に、このようなものをより速く実行するための「トリック」はありますか? たとえば、ループを別のもの (ループ内で実行したい統計を含む関数を適用するようなもの) に変換したり、データのサブセットを実際に変数に割り当てる必要をなくしたりしますか?
編集:
おそらくこれは一般的な知識 (またはサンプリング エラー) にすぎませんが、コードの一部で、subset コマンドを使用するのではなく、ブラケットを使用してサブセット化を試みたところ、パフォーマンスがわずかに向上したようで、驚きました。上記と同じオブジェクト名を使用して、以下に使用および出力したコードがいくつかあります。
アップデート:
回答の 1 つで、jorgusch は、data.table パッケージを使用してサブセット化を高速化することを提案しました。それで、今週初めに実行した問題にそれを適用しました。1,500,000 を少し超える行と 4 つの列 (ID、Var1、Var2、Var3) を持つデータセットで、各グループ (「ID」変数でインデックス付け) で 2 つの相関を計算したいと考えました。50,000 をわずかに超えるグループがあります。以下は私の最初のコードです(これは上記と非常に似ています):
どれくらいの時間がかかったかを正確に測定するために、今それを再実行していますが、覚えている限り、朝オフィスに着いたときに実行を開始し、午後半ばに終了しました。図 5-7 時間。
data.table を使用するようにコードを再構築しています....
data.table を使用した結果を for ループを使用してすべての ID をサブセット化し、結果を手動で記録した結果と比較すると、同じ答えが得られたようです (ただし、もう少し徹底的に確認する必要があります)。かなりのスピードアップになりそうです。
更新 2:
サブセットを使用してコードを実行すると、最終的に再び終了しました。
更新 3:
同じく推奨された plyr パッケージを使用して、何かが異なって機能するかどうかを確認したかったのです。これは初めての使用なので、多少効率が悪いかもしれませんが、サブセット化された for ループに比べてかなり役に立ちました。
以前と同じ変数と設定を使用して...
r - R:選択式(この場合は文字列)のリストをサブセット関数に渡す方法は?
データの例を次に示します。
サブセットを使用して選択的な単一行を引き出すことができるもの:
そして、論理ORを使用して複数の行を引き出します
しかし、シリーズ式のリストが長い場合、これは入力が非常に面倒になるため、次のように、より適切な方法で定義することをお勧めします。
そして、このようなことをすることができます、
上記は明らかに失敗します、私はこれを行うための最良の方法が何であるかわかりませんか?
algorithm - 与えられた配列の (n-1) サブセットのそれぞれの積を見つける
元の質問を削除して申し訳ありません。ここにあります: n 個の整数のバッグまたは配列があります。(n-1) 個のサブセットのそれぞれの積を見つける必要があります。例えば:
S = {1, 0, 3, 6}
ps[1] = 0*3*6 = 0;
ps[2] = 1*3*6 = 18; 等
話し合いの後、3 つのケースに対処する必要があり、それらを以下に示します。
ありがとう。
c# - C#の膨大なコレクションで使用されているプロパティのサブセットをすばやく取得する
オブジェクトの膨大なコレクション(OfType <>()を使用して列挙可能としてキャストできます)があります。これらの各オブジェクトにはCategory
、アプリケーション内の別の場所にあるリストから取得されたプロパティがあります。このコレクションは数百のアイテムのサイズに達する可能性がありますが、たとえば、可能なカテゴリの6/30のみが実際に使用される可能性があります。これらの6つのカテゴリを見つけるための最速の方法は何ですか?巨大なコレクションのサイズは、全体を繰り返し処理してすべての一意の値を返すことを思いとどまらせるので、これを達成するためのより高速な方法はありますか?
理想的には、カテゴリをにまとめますList<string>
。
linq - Linqを使用したサブセットのフィルタリング
列挙が非常に長く、大きすぎてリストに合理的に変換できないと想像してください。リストから重複を削除したいとも想像してみてください。最後に、最初の列挙のごく一部だけが重複を含む可能性があることを私が知っていると想像してください。最後のポイントは問題を実用的にします。
基本的に、いくつかの述語に基づいてリストをフィルターで除外し、そのサブセットでDistinct()のみを呼び出しますが、述語がfalseを返した列挙と再結合します。
誰かがこれを行うための良い慣用的なLinqの方法を考えることができますか?質問は次のように要約されると思います。
Linqを使用して、述語列挙に対して選択的な処理を実行し、結果ストリームを述語から拒否されたケースと再結合するにはどうすればよいですか?