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 | . | . | . | . | 特化したソルバー | 特化したデータ配列を持つ | 
