2.5.2.2.3. 辞書キー格納方式 (DOK)¶
- Python 辞書のサブクラス
キーは (row, column) のインデックスタプルです (要素は重複してはいけません)
辞書の値は非ゼロ要素の値に対応します
疎行列を効率的にインクリメンタルに構築できます
- コンストラクタは以下を受け付けます:
密行列(配列)
疎行列
シェイプタプル (空の行列を作ります)
個々の要素への 高速 なアクセス O(1)
柔軟なスライスと疎行列の構造の効率的な変更
一度構築されれば coo_matrix に効率的に変換できます
算術は低速です (dict.iteritems() に対する for ループ)
- 利用:
疎パターンが事前にわかっていない、または変更される場合
2.5.2.2.3.1. 例¶
DOK 行列を要素毎に代入して作成:
>>> mtx = sparse.dok_matrix((5, 5), dtype=np.float64) >>> mtx <5x5 sparse matrix of type '<... 'numpy.float64'>' with 0 stored elements in Dictionary Of Keys format> >>> for ir in range(5): ... for ic in range(5): ... mtx[ir, ic] = 1.0 * (ir != ic) >>> mtx <5x5 sparse matrix of type '<... 'numpy.float64'>' with 20 stored elements in Dictionary Of Keys format> >>> mtx.todense() matrix([[ 0., 1., 1., 1., 1.], [ 1., 0., 1., 1., 1.], [ 1., 1., 0., 1., 1.], [ 1., 1., 1., 0., 1.], [ 1., 1., 1., 1., 0.]])
スライスとインデクス:
>>> mtx[1, 1] 0.0 >>> mtx[1, 1:3] <1x2 sparse matrix of type '<... 'numpy.float64'>' with 1 stored elements in Dictionary Of Keys format> >>> mtx[1, 1:3].todense() matrix([[ 0., 1.]]) >>> mtx[[2,1], 1:3].todense() matrix([[ 1., 0.], [ 0., 1.]])