2014年9月26日0件のコメント今回は珍しく(?)初心者フレンドリーに書こうと思う。JPでの発表で、Pythonで使える疎行列のライブラリ「scipy.sparse」について反響があったので、改めてここで使い方の基本をまとめてみることとする。そもそも、便利で使い方もそれほど難しくないのに、日本語の情報がほとんどないようなので敬遠されていることもあるかもしれない。ここでは、使い方の基本を解説する。疎行列とは?要素のほとんどが0であるような行列を疎行列と呼ぶ。ない普通の行列を、区別したいときには密行列と呼ぶ。疎行列では、非ゼロ要素だけを覚えておけば良いので、メモリ、計算時間ともに大幅な節約になる。非ゼロ要素の割合が小さい場合は、その節約は大きくなる。機械学習の分野だと、計算過程で大規模な疎行列が必要になることがよくある。csr_matrixだけを覚えれば良い。演算をするという流れになる。値をセットするときはlil_matrixを使う計算するときはcsr_matrixまたはcsc_matrixを使うlil_matrixでも演算はできるが、計算効率を考えるとそれは避けた方がいい。コード例は以下のようになる。D=A+B\]という計算をしている。これはユースケースを示しているだけで、実際に疎行列が威力を発揮するのは大規模行列のときである。3×3程度の大きさだと疎行列を使うメリットはない。lil_matrixのコンストラクタでは、引数として(m,n)のように行列のサイズだけをしていすれば、まず全要素が0の行列ができる。してできた行列をaとすると、a[i,j]=xの形で非ゼロ要素だけセットする。その後、a.tocsr()またはa.tocsc()で、csr_matrixまたはcsc_matrixに変換してから、和・積などの計算をする。CSRかCSCか?では、計算するときにはcsr_matrixにすべきか、csc_matrixにすべきか、という問題が残るが、それは以下のルールを考慮した上、適宜よい方を選択すればよい。csr_matrixは〜行目を取り出す操作、csc_matrixは〜列目を取り出す操作が高速である同じ型同士の和・積は高速である。csc_matrixは転置行列を取ると型が移り合う。csr_matrixの転置をとるとcsc_matrixになり、csr_matrixの転置をとるとcsc_matrixになる。以上の説明で、「高速になる」というのは、大規模データの場合はすべて「それ以外はやってはいけない」と読み替えても間違いではない。csr_matrixとcsc_matrixの和・積の計算はやってはいけない。JPでもしゃべったが次回の記事で書こうと思う。最初の例で行列Aの説明が間違っているとの指摘を受けましたので、訂正しました。コメントをキャンセルメールアドレスが公開されることはありません。