
122
5 章 疎行列を用いた分割表
まったく同様に、
.A
プロパティを使うこともできます。プロパティは属性に似ていますが、実
は関数を実行するものです。
.A
は特に危険なプロパティなのですが、その理由は、巨大な配列計
算になるおそれのある演算を隠してしまうからです。疎行列の密バージョンは、その疎行列自体よ
りも何桁も大きくなるおそれがあり、キーをたった
3
つ打つだけでコンピュータを降参させてし
まえるのです。
s_coo.A
array([[ 4., 0., 3.],
[ 0., 32., 0.]])
本章でも、それ以外でも、読みやすさを損なわない限り
toarray()
メソッドを使うことをお勧め
します。計算コストが高くなるおそれのある演算をよりわかりやすく知らせてくれるからです。た
だし、短い表記の
.A
を使った方がずっとコードが読みやすくなる場合には、臆せず使って構いま
せん(例えば、数学の式をいくつも実装する場合など)。
5.2.2
演習:
COO
を使った表現
以下の行列を
COO
の表現で書きましょう。
s2 = np.array([[0, 0, 6, 0, 0],
[1, 2, 0, 4, 5],
[0, 1, 0, 0, 0],
[9, 0, 0, 0, 0],
[0, 0, 0, 6, 7]])
COO
形式はわかりやすい表現なのですが、残念ながら、最小のメモリを使ったり、計算中にで
きる限り高速に配列を横断するようには最適化されていません(
1
章で紹介したように、データ
の位置関係は、効率的な数値計算にとってとても重要なのです) ...