2.5.2. 格納方式

  • scipy.sparse には7つの形式の疎行列があります:
    1. csc_matrix: Compressed Sparse Column Format 圧縮列格納方式

    2. csr_matrix: Compressed Sparse Row format 圧縮行格納方式

    3. bsr_matrix: Block Sparse Row format ブロック圧縮行格納方式

    4. lil_matrix: List of Lists format リストのリスト格納方式

    5. dok_matrix: Dictionary of Keys format 辞書キー格納方式

    6. coo_matrix: COOrdinate format 座標リスト格納方式 (IJV, 3つ組格納方式)

    7. dia_matrix: DIAgonal format 圧縮対角格納方式

  • それぞれに向いた仕事があります

  • 多くが Nathan Bell による 疎行列ツールの C++ モジュールで採用されています

  • 以下がインポートされていると仮定して進めます:

    >>> import numpy as np
    
    >>> import scipy.sparse as sps
    >>> import matplotlib.pyplot as plt
  • NumPy ユーザへの 注意:
    • ” での乗算は *行列積 (ドット積) です

    • NumPy の話ではありません!
      • NumPy の関数は引数として ndarray/matrix を期待しているため、疎行列を渡すと動作しません

2.5.2.1. 共通のメソッド

  • scipy.sparse のクラスは全て spmatrix の派生クラスです
    • 算術演算のデフォルト実装
      • 常に CSR に変換します

      • 派生クラスは効率のために上書きします

    • シェイプ、データ型 set/get

    • 非ゼロのインデクス

    • 格納形式の変換、Numpy との連携 (tarry(), to dense())

    • ...

  • 属性:
    • mtx.A - mtx.toarray() と同じ

    • mtx.T - 転置 (mtx.transpose() と同じ)

    • mtx.H - エルミート (共役) 転置

    • mtx.real - 複素行列の実部

    • mtx.imag - 複素行列の虚部

    • mtx.size - 非ゼロの数 ( self.getnnz() と同じ)

    • mtx.shape - 行と列の数 (タプル)

  • データはたいてい NumPy 配列で格納されます

2.5.2.3. まとめ

格納方式のまとめ

方式

行列 * ベクトル

要素の取得

ファンシーインデクスによる要素の取得

要素の設定

ファンシーインデクスによる要素の設定

ソルバー

ノート

DIA sparsetools . . . .

反復法のソルバー

特化したデータ配列を持つ

LIL

CSR 経由で

反復法のソルバー

算術は CSR でインクリメンタルに構築

DOK python

1つの軸に対してのみ

反復法のソルバー

要素アクセスが O(1) でインクリメンタルに構築

COO sparsetools . . . .

反復法のソルバー

データ配列を持ち、高速な変換を補助

CSR sparsetools

低速

.

任意のソルバー

データ配列を持ち、高速な行毎の演算

CSC sparsetools

低速

.

任意のソルバー

データ配列を持ち、高速な列毎の演算

BSR sparsetools . . . .

特化したソルバー

特化したデータ配列を持つ