scipy.sparseのまとめ

scipy.sparseの疎行列クラス

csr_matrix 圧縮行格納方式

CSR(Compressed Sparse Row)は行ごとに圧縮を行います。

書き方

csr_matrix( 配列 )

scipy.sparse.csr_matrix 公式

【例】
from scipy.sparse import csr_matrix
 
ary = [[10, 0, 20],
     [0, 30, 40],
     [0, 0, 50]]
 
csr = csr_matrix(ary)
print(csr)
  (0, 0)	10
  (0, 2)	20
  (1, 1)	30
  (1, 2)	40
  (2, 2)	50
csr_matrix解説

例で設定した配列を図にしてみると下記のようなマトリクスの図になります。
青文字は(行,列)を表しています。

この図と実行結果を照らし合わせてみると、(0,0) 10、(0,2) 20、となっているのが確認でき、それぞれの(行,列)と0以外の数字が対応していることが見て取れると思います。

data属性

マトリックスのCSRフォーマットデータを表します。つまり、設定した数字を表しています。

【例】dataの表示
print(csr.data)
[10 20 30 40 50]

indices属性

マトリックスのCSRフォーマットインデックスを表します。 indicesは文字通りインデックス(indicesはindexの複数形)を意味しています。

【例】indicesの表示
print(csr.indices)
[0 2 1 2 2]
indices解説

ここで言うインデックスは下記の図の赤丸の数字を表しています。

つまり、dataで出力した数字が何列名かを表しており、10なら0、20なら2、という具合にインデックスが設定されています。

indptr属性

マトリックスのCSRフォーマットインデックスポインタを表します。 ind(インデックス)のptr(ポインタ)ということです。

【例】indptrの表示
print(csr.indptr)
[0 2 4 5]
indptr解説

ind(インデックス)のptr(ポインタ)とは下記の図のようなイメージです。
図では矢印がポインタを表しており、それぞれの色が対応しているポインタの位置を表しています。

ポインタが青の位置の時(スタート位置の時)、それ以上値が存在しないので個数は0。
ポインタが赤の位置の時、ポインタ位置よりも上にある値の数字は10と20で2個。
ポインタが緑の位置の時、ポインタ位置よりも上にある値の数字は10と20と30と40で4個。
ポインタが黒の位置の時、ポインタ位置よりも上にある値の数字は10と20と30と40と50で5個。

つまり、ポインタの位置によってそれぞれの数字をカウントしていることになります。

SciPy

Posted by Bright_Noah