2.5.1. 導入¶
(密)行列とは:
数学的な対象
2次元配列の値を格納するデータ構造
重要な機能:
- 全ての要素を一度にメモリ割り当てする
連続したかたまりとして、Numpy の ndarray を考えて
個々の要素への 高速 なアクセス (*)
2.5.1.1. どうして疎行列が必要なの?¶
メモリ, n**2 で増加します
単純な例(倍精度行列):
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> x = np.linspace(0, 1e6, 10) >>> plt.plot(x, 8.0 * (x**2) / 1e6, lw=5) [<matplotlib.lines.Line2D object at ...>] >>> plt.xlabel('size n') <matplotlib.text.Text object at ...> >>> plt.ylabel('memory [MB]') <matplotlib.text.Text object at ...>
2.5.1.2. 疎行列と疎行列の格納方式¶
疎行列は ほぼ空な 行列です
ゼロを全て格納するのは無駄なので -> 非ゼロの要素だけを格納します
圧縮 についても考えましょう
長所: 大きくメモリを節約できます
短所:
2.5.1.3. 典型的な応用¶
- 偏微分方程式(PDEs)の求解
有限要素法
機械工学、電子高額、物理、...
- グラフ理論
(i, j) で非ゼロということは、ノード i がノード j に接続されることを意味します
...
2.5.1.5. 疎な構造の可視化¶
spy()
frommatplotlib
プロット例: