2.5.1 介绍
(密集) 矩阵是:
- 数据对象
- 存储二维值数组的数据结构
重要特征:
- 一次分配所有项目的内存
- 通常是一个连续组块,想一想Numpy数组
- 快速访问个项目(*)
2.5.1.1 为什么有稀疏矩阵?
- 内存,增长是n**2
- 小例子(双精度矩阵):
In [5]:
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)
plt.xlabel('size n')
plt.ylabel('memory [MB]')
Out[5]:
<matplotlib.text.Text at 0x105b08dd0>
2.5.1.2 稀疏矩阵 vs. 稀疏矩阵存储方案
- 稀疏矩阵是一个矩阵,巨大多数是空的
- 存储所有的0是浪费 -> 只存储非0项目
- 想一下压缩
- 有利: 巨大的内存节省
- 不利: 依赖实际的存储方案, (*) 通常并不能满足
2.5.1.3 典型应用
- 偏微分方程(PDES)的解
- 有限元素法
- 机械工程、电子、物理…
- 图论
- (i,j)不是0表示节点i与节点j是联接的
- …
2.5.1.4 先决条件
最新版本的
numpy
scipy
matplotlib
(可选)ipython
(那些增强很方便)
2.5.1.5 稀疏结构可视化
- matplotlib中的
spy()
- 样例绘图: