2.5.1 介绍

(密集) 矩阵是:

  • 数据对象
  • 存储二维值数组的数据结构

重要特征:

  • 一次分配所有项目的内存
    • 通常是一个连续组块,想一想Numpy数组
  • 快速访问个项目(*)

2.5.1.1 为什么有稀疏矩阵?

  • 内存,增长是n**2
  • 小例子(双精度矩阵):

In [5]:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. x = np.linspace(0, 1e6, 10)
  4. plt.plot(x, 8.0 * (x**2) / 1e6, lw=5)
  5. plt.xlabel('size n')
  6. plt.ylabel('memory [MB]')

Out[5]:

  1. <matplotlib.text.Text at 0x105b08dd0>

2.5.1 介绍 - 图1

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()
  • 样例绘图:

2.5.1 介绍 - 图22.5.1 介绍 - 图32.5.1 介绍 - 图4