を分割するために、私は、i番目のエントリは、番号iのパーティションIDを示すnumpyの配列を有するパイソンnumpyの:インジケータが
にN-1まで番号0のパーティションを表現しようとしています。例えば、numpyのアレイ
indicator = array([1, 1, 3, 0, 2, 3, 0, 0])
はIDを持つパーティションに属し番号3,6、および7 0番号0と1 1. 4を分割するために属することを示す。2. 2のパーティションに属します5はパーティション3に属しています。これをというインジケータの表記としましょう。
パーティションを表す別の方法は、i番目のリストがID iのパーティションであるリストのリストです。上記の配列の場合、これは
explicit = [[3, 6, 7], [0, 1], [4], [2, 5]]
にマップのが明示表現これを呼びましょう。
私の質問はインジケータ表現を明示的表現に変換する最も効率的な方法は何ですか?単純な方法は、インジケータ配列を反復し、要素を明示的な配列のそれぞれのスロットに割り当てることですが、numpy配列を反復することは非効率的です。 これを行うためのより自然なnumpy構造がありますか?私はそれらを比較することはできませんので、私はあなたの反復ベースのアプローチを見ていないここで
いいえ、私は最初の明示的な表現がnumpyで自然であるとは思わないので、配列が不均一になります。例えば、これを回避することができます。オブジェクトの配列を持つことで、あなたの明示的な表現のためのリストがより自然な選択かもしれません。しかし、これは変更されていないが、それは "自然な"数え切れない構造ではない。 –
1つのホットエンコーディングを使用するスパース行列はどうですか? – UberStuper
投稿されたソリューションのいずれかはあなたのために機能しましたか? – Divakar