私はCOO形式で格納された疎行列で作業しています。各行ごとに連続する要素の数を取得する最も速い方法は何でしょうか。スパース行列の行の連続する要素
は、たとえば次の行列を考えてみます。
a = [[0,1,2,0],[1,0,0,2],[0,0,0,0],[1,0,1,0]]
そのCOO表現が
(0, 1) 1
(0, 2) 2
(1, 0) 1
(1, 3) 2
(3, 0) 1
(3, 2) 1
私は[1,2,0,2]
する結果が必要になります。最初の行には、近くにある2つの非ゼロ要素が含まれています。したがって、そのグループまたはセット。 2番目の行には2つの非ゼロ要素がありますが、近くには存在しません。したがって、2つのグループを形成していると言えます。第3の行には、非ゼロでないのでグループは存在しない。 4番目の行には2つの非ゼロがありますが、ゼロで区切られていないため、2つのグループと見なします。これは1行あたりのクラスタ数に似ています。行を繰り返すことは選択肢ですが、より高速な解決策がない場合に限ります。この点に関する助けに感謝します。
別の簡単な例:次の行を検討:
[1,2,3,0,0,0,2,0,0,8,7,6,0,0]
上記列が非ゼロはゼロによって分離されたばかりの三つのグループが存在する[3]
正弦を返すべきです。
を。 (2)スパース行列がそのために設計されている場合、反復行アプローチは完全です。最初に[csr_matrix]に変換してください(http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html#scipy.sparse.csr_matrix)(変換は非常に効率的です! ) – sascha
@saschaただ行内にあるグループの数を見つけること。グループは連続する要素を構成します。質問を更新して明確にする – Stormvirux