web-dev-qa-db-ja.com

Scipyスパース行列-さまざまな実装の目的と使用法

Scipyには 利用可能な多くの異なるタイプのスパース行列 があります。これらのタイプの最も重要な違いは何ですか?また、それらの使用目的の違いは何ですか?

サンプルコードに基づいてpython)でコードを開発しています1 Matlabで。コードの1つのセクションでは、スパース行列を使用しています。これは、Matlabでは単一の(迷惑な)型を持っているように見えます。私は、どの型を使用すべきかを理解しようとしています。2 Pythonで。


1:これはクラス用です。ほとんどの人がMatlabでプロジェクトを行っていますが、私は不必要な作業と混乱を生み出すのが好きです---どうやら。

2:これは学術的な質問です:コードは ' [〜#〜] csr [〜#〜] '形式で正しく機能していますが、最適な使用法を知ることに興味があります。

30
DilithiumMatrix

これに完全に答えていない場合は申し訳ありませんが、うまくいけば、いくつかの洞察を提供することができます。

CSC(圧縮スパース列)とCSR(圧縮スパース行)はよりコンパクトで効率的ですが、「最初から」構築するのは困難です。 Coo(座標)とDOK(キーの辞書)は簡単に作成でき、matrix.tocsc()またはmatrix.tocsr()を介してCSCまたはCSRに変換できます。

CSCは、列の配列および各行での値として格納されるため、一般に、列ベクトルまたは列操作へのアクセスがより効率的です。

CSRマトリックスは反対です。行の配列と各列の値として格納され、行ベクトルまたは行操作へのアクセスがより効率的になります。

36
Will