文章目录
1 一些基本库
from ripser import ripser
from persim import plot_diagrams
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
2 测试数据
data = datasets.make_circles(n_samples=100)[0] + 5 * datasets.make_circles(n_samples=100)[0]
plt.scatter(data[:, 0], data[:, 1])
plt.show()
输出如下:
3 使用默认设置
计算 H 0 H_0 H0和 H 1 H_1 H1并绘制:
dgms = ripser(data)['dgms']
plot_diagrams(dgms, show=True)
输出如下:
当然也可以分开展示 H 0 H_0 H0和 H 1 H_1 H1:
plot_diagrams(dgms, plot_only=[0], ax=plt.subplot(121))
plot_diagrams(dgms, plot_only=[1], ax=plt.subplot(122))
plt.show()
输出如下:
4 素数基础上的同伦
通过设置coeff=p,计算 p ≥ 2 p\geq2 p≥2时的同伦:
dgms = ripser(data, coeff=3)['dgms']
plot_diagrams(dgms, plot_only=[1], title="Homology of Z/3Z", show=True)
输出如下:
5 设置需要计算的同伦类别
默认情况下只展示 H 0 H_0 H0和 H 1 H_1 H1。通过设置maxdim=p,可以计算 H 0 , … , H p H_0,\dots,H_p H0,…,Hp。需要注意的是, p > 1 p>1 p>1的计算相对较慢:
dgms = ripser(data, maxdim=2)['dgms']
plot_diagrams(dgms, show=True)
输出如下:
6 指定撕裂滤流的最大半径
用于限制VR complex的最大半径,图中的坐标值可以直接体现这一点:
dgms = ripser(data, thresh=1.5)['dgms']
plot_diagrams(dgms, show=True)
输出如下:
7 绘制选项
7.1 坐标轴范围
dgms = ripser(data)['dgms']
plot_diagrams(dgms, xy_range=[-2, 10, -1, 20], show=True)
输出如下:
7.2 颜色图
查看所有可用的颜色图:
import matplotlib as mpl
print(mpl.style.available)
输出如下:
['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background',
'fast', 'fivethirtyeight', 'ggplot', 'grayscale',
'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid',
'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster',
'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']
添加颜色图选项:
dgms = ripser(data)['dgms']
plot_diagrams(dgms, colormap='Solarize_Light2', show=True)
输出如下:
7.3 生命周期
plot_diagrams(dgms, lifetime=True, show=True)
输出如下: