2.5.2. 格納方式¶
- scipy.sparse には7つの形式の疎行列があります:
csc_matrix: Compressed Sparse Column Format 圧縮列格納方式
csr_matrix: Compressed Sparse Row format 圧縮行格納方式
bsr_matrix: Block Sparse Row format ブロック圧縮行格納方式
lil_matrix: List of Lists format リストのリスト格納方式
dok_matrix: Dictionary of Keys format 辞書キー格納方式
coo_matrix: COOrdinate format 座標リスト格納方式 (IJV, 3つ組格納方式)
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())
...
- scipy.sparse のクラスは全て
- 属性:
mtx.A - mtx.toarray() と同じ
mtx.T - 転置 (mtx.transpose() と同じ)
mtx.H - エルミート (共役) 転置
mtx.real - 複素行列の実部
mtx.imag - 複素行列の虚部
mtx.size - 非ゼロの数 ( self.getnnz() と同じ)
mtx.shape - 行と列の数 (タプル)
データはたいてい NumPy 配列で格納されます
2.5.2.2. 疎行列クラス¶
2.5.2.3. まとめ¶
方式 |
行列 * ベクトル |
要素の取得 |
ファンシーインデクスによる要素の取得 |
要素の設定 |
ファンシーインデクスによる要素の設定 |
ソルバー |
ノート |
---|---|---|---|---|---|---|---|
DIA | sparsetools | . | . | . | . | 反復法のソルバー |
特化したデータ配列を持つ |
LIL | CSR 経由で |
可 |
可 |
可 |
可 |
反復法のソルバー |
算術は CSR でインクリメンタルに構築 |
DOK | python | 可 |
1つの軸に対してのみ |
可 |
可 |
反復法のソルバー |
要素アクセスが O(1) でインクリメンタルに構築 |
COO | sparsetools | . | . | . | . | 反復法のソルバー |
データ配列を持ち、高速な変換を補助 |
CSR | sparsetools | 可 |
可 |
低速 |
. | 任意のソルバー |
データ配列を持ち、高速な行毎の演算 |
CSC | sparsetools | 可 |
可 |
低速 |
. | 任意のソルバー |
データ配列を持ち、高速な列毎の演算 |
BSR | sparsetools | . | . | . | . | 特化したソルバー |
特化したデータ配列を持つ |