Pythonで疎行列を取り扱う
疎行列の扱い方について
疎行列は要素としてほとんどが0の値となる行列。例えばユーザー×映画のレーティングの行列を考えるとわかりやすい。 映画のデータが約1000個ぐらいあったとすると1000個全ての映画に対してレーティングをするユーザーはほとんどいないでしょう。例えば100個の映画にレーティングしたとしても900個の要素に対して0の値が入る。 このように0の値が非常に多い行列を疎行列という。 pythonで疎行列を取り扱う際、numpy行列にデータをそのまま入れるよりも、csc_matrixかcsr_matrixにしたほうがメモリ消費を抑えられて、計算速度も早い。
Scipyによる疎行列の計算
scipy.sparseモジュールに疎行列を扱うクラスがある。 覚えておけば良いのは以下3つぐらい。
lil_matrixで値を設定して、csr_matrix, csc_matrixで計算をさせるというのが常套手段。 ちなみにlilはLInked List, csc, csrはCompressed Sparse Column(Row)の略。 csrは行の取り出しが、cscは列の取り出しが高速。
使用例
a = sparse.lil_matrix((5,5)) a_csc = a.tocsc() a_csr = a.tocsr() # 例えば3行目のデータをとりたい場合は a_csr.getRow(3).todense()
参考
データサイエンティスト養成読本 機械学習入門編 (Software Design plus)
- 作者: 比戸将平,馬場雪乃,里洋平,戸嶋龍哉,得居誠也,福島真太朗,加藤公一,関喜史,阿部厳,熊崎宏樹
- 出版社/メーカー: 技術評論社
- 発売日: 2015/09/10
- メディア: 大型本
- この商品を含むブログ (5件) を見る
内部構造を知りたい場合はこの記事が参考になる。 hamukazu.com