第 2 章 持久同调核心概念 本章建立数学底座:单纯形 → 链复形 → 同调 → 过滤 → 持久。读完后你应能向同事解释「持久图上的一个点代表什么」。 2.1 为什么需要代数拓扑 给定点云,人眼能识别「一个环」「两团分开的点」。算法需要可计算、可比较的「形状摘要」。同调群(Homology Group)用代数方式计数: 维数 d | 直观含义 | 例子 H0 | 连通分量个数 | 点云里有几「堆」 H1 | 一维洞(环) | 圆环、八字形中间 H2 | 二维空腔 | 球面围成的内部(需 3D 点云) 持久同调进一步问:这些特征在不同尺度下何时出现、何时消失? 2.
本章建立数学底座:单纯形 → 链复形 → 同调 → 过滤 → 持久。读完后你应能向同事解释「持久图上的一个点代表什么」。
给定点云,人眼能识别「一个环」「两团分开的点」。算法需要可计算、可比较的「形状摘要」。同调群(Homology Group)用代数方式计数:
| 维数 d | 直观含义 | 例子 |
|---|---|---|
| H0 | 连通分量个数 | 点云里有几「堆」 |
| H1 | 一维洞(环) | 圆环、八字形中间 |
| H2 | 二维空腔 | 球面围成的内部(需 3D 点云) |
持久同调进一步问:这些特征在不同尺度下何时出现、何时消失?
满足闭包性的单纯形集合:复形里三角形的每条边、每个顶点也必须在复形中。
v2 / \ / \ v0 --- v1 若 {v0,v1,v2} 在复形中,则 {v0,v1}、{v1,v2}、{v0,v2} 及 {v0}、{v1}、{v2} 均须在复形中
点云本身不是复形——我们需要构造复形(第 3 章 Vietoris-Rips)。
k-维链是 k-单纯形的形式线性组合(系数在域 F 中,Ripser 默认 F = Z/2Z,即 mod 2)。
∂ 把 k-链映到 (k−1)-链:对每个 k-单纯形,求其 (k−1) 维面的交替和。
三角形 [v0, v1, v2] 的边界 = 边[v0,v1] - 边[v1,v2] + 边[v0,v2]
关键性质:∂∂ = 0(边界的边界为零)——这保证 im(∂_{k+1}) ⊆ ker(∂_k)。
[
H_k = \ker(\partial_k) / \mathrm{im}(\partial_{k+1})
]
Betti 数 β_k = H_k 的秩 = 独立 k 维拓扑特征个数。
一族嵌套的复形:
[
K_0 \subseteq K_1 \subseteq \cdots \subseteq K_n
]
每个 (K_i) 附带一个参数 (t_i)(如 VR 半径)。随参数增大,复形只增不减。
参数 t: 0 ──────► t_b ──────► t_d ──────► ∞ birth death 复形: 小 ──► 出现环 ──► 三角形填洞 ──► 大
每个特征一条线段 [birth, death];持久性 persistence = death − birth。
把每条线段画成平面上的点 (birth, death)。对角线 birth = death 表示零持久性。
death │ · ← 噪声(靠近对角线) │ · │ ★ ← 显著特征(远离对角线) └──────────────── birth
完整算法涉及矩阵化简(column algorithm)或 cohomology 路径(Ripser 采用后者,见第 8 章)。核心流程:
过滤复形 K_0 ⊆ K_1 ⊆ ... ⊆ K_n │ ▼ 按 filtration 顺序处理 k-单纯形(先低维后高维) │ ▼ 维护「已约化边界矩阵」或等价结构 │ ▼ 记录每个同调生成元的 (birth, death) │ ▼ 输出各维持久图 dgms[d]
Ripser 的突破在于:不显式构造整个复形,在边插入顺序上增量计算,复杂度接近最优。
| 数学概念 | Ripser 输出 |
|---|---|
| H_d 的生成元 | dgms[d] 的每一行 |
| birth 时间 | dgms[d][k, 0] |
| death 时间 | dgms[d][k, 1](可能为 inf) |
| 持久性 | death - birth(inf 需特殊处理) |
| 系数域 Z/pZ | 参数 coeff(第 8 章) |
Ripser 计算的是持久上同调(Persistent Cohomology),结果与同调同构(在有限域系数下维数一致),持久图相同。但 do_cocycles=True 时返回的是上循环(cocycle) 代表元——对偶视角,便于提取具体几何代表。详见第 8 章。
| 误解 | 正解 |
|---|---|
| H1 的点数 = 洞的个数 | 每个独立同调生成元一条;复杂形状可有多个 H1 特征 |
| death = inf 一定重要 | 可能是过滤截断(thresh)导致未填平,不一定是「真无穷持久」 |
| 持久性越大越好 | 需结合数据尺度和噪声;过大可能是采样 artifact |
| 持久图 = 点云可视化 | 持久图是拓扑摘要,丢失几何嵌入细节 |
⚠️ 系数域:默认 mod 2 时,定向信息丢失(如 Möbius 带与圆柱 H1 维数相同)。需定向或 torsion 信息时换
coeff(第 8 章)。
dgms[0] 中有几条 persistence 很大的 bar。dgms 即各维持久图。本章的标准点云(圆环、双圆环、球面、环面、随机点)可以用下面这套生成函数构造,便于验证拓扑预期。下面是完整的点云生成与持久同调计算脚本:
"""标准点云生成与持久同调计算完整示例。 提供圆环、双圆环、球面、环面、随机点五种标准点云生成器, 并对每种点云计算持久同调,验证拓扑预期(H0/H1 的显著特征)。 依赖:pip install ripser numpy """ import numpy as np from ripser import ripser def sample_circle(n=100, radius=1.0, noise=0.05, seed=0): """单位圆周上的带噪点云(H1 有一个显著洞)。""" rng = np.random.default_rng(seed) theta = np.linspace(0, 2 * np.pi, n, endpoint=False) pts = np.column_stack([np.cos(theta), np.sin(theta)]) * radius return pts + rng.standard_normal(pts.shape) * noise def sample_sphere(n=200, radius=1.0, noise=0.05, seed=0): """3D 球面上的均匀采样(H2 可能有显著点)。""" rng = np.random.default_rng(seed) pts = rng.standard_normal((n, 3)) pts /= np.linalg.norm(pts, axis=1, keepdims=True) return pts * radius + rng.standard_normal(pts.shape) * noise def sample_random(n=100, dim=2, seed=0): """均匀随机点(对照:无显著拓扑)。""" rng = np.random.default_rng(seed) return rng.uniform(-1, 1, size=(n, dim)) def summarize(dgms, name): """打印各维度的点数与最大持久。""" print(f"\n[{name}]") for d, dgm in enumerate(dgms): pers = dgm[:, 1] - dgm[:, 0] pers = pers[np.isfinite(pers)] if len(pers): print(f" H{d}: {len(dgm)} 点, max persistence = {pers.max():.4f}") else: print(f" H{d}: 0 点") def main(): # 圆环:H1 应有一个显著洞 circle = sample_circle(n=120, noise=0.05, seed=42) summarize(ripser(circle, maxdim=1)['dgms'], "圆环 (期望 H1 一个显著洞)") # 球面:H2 可能有显著点 sphere = sample_sphere(n=200, noise=0.03, seed=7) summarize(ripser(sphere, maxdim=2)['dgms'], "球面 (期望 H2 有显著点)") # 随机点:无显著拓扑 rand = sample_random(n=120, dim=2, seed=11) summarize(ripser(rand, maxdim=1)['dgms'], "随机点 (期望无显著拓扑)") if __name__ == "__main__": main()
| 点云 | 拓扑预期 |
|---|---|
| 单位圆周 | H1 一个显著洞 |
| 两个分离圆环 | H1 两个显著洞 |
| 3D 球面 | H2 可能有显著点 |
| 环面 | H1 两个显著洞 |
| 均匀随机点 | 无显著拓扑 |
💡 「VR 复形随半径演化」示例展示圆环的 Betti 数随 ε 演化:β0 从 100 降到 1(合并),β1 在某区间为 1(洞存活)再归 0(洞填平)——这是理解 birth/death 最直观的过程。
下一章:Vietoris-Rips 过滤原理——点云如何变成可计算的复形。