1。概要
多くの点で連続ホモトピーを行う必要がある場合もありますが、点数が1000を超える場合はH 1 H_1を計算してください。H1終了する場合があります。この問題を軽減するために、最近傍サンプリングによるスマート サブサンプリングが提案されています。必要なライブラリは次のとおりです。
import time
import numpy as np
import matplotlib.pyplot as plt
import tadasets
from sklearn import datasets
from persim import plot_diagrams, bottleneck
from persim import bottleneck_matching
from ripser import ripser
2 テストデータ
X = tadasets.dsphere(d=1, n=2000, r=5, noise=1)
plt.scatter(X[:, 0], X[:, 1])
plt.axis('equal')
plt.tight_layout()
plt.show()
出力は次のとおりです。
3 貪欲順列
最初にサンプリングせずに続行します。
tic = time.time()
dgms_full = ripser(X)['dgms']
toc = time.time()
print("Elapsed Time Full Point Cloud: %.3g seconds" % (toc-tic))
出力は次のとおりです。
Elapsed Time Full Point Cloud: 6.18 seconds
サンプル 400 ポイント:
tic = time.time()
res = ripser(X, n_perm=400)
toc = time.time()
print("Elapsed Time Subsampled Point Cloud: %.3g seconds"%(toc-tic))
dgms_sub = res['dgms']
idx_perm = res['idx_perm']
r_cover = res['r_cover']
出力は次のとおりです。
Elapsed Time Subsampled Point Cloud: 0.104 seconds
表示は次のとおりです。
plt.figure(figsize=(12, 12))
plt.subplot(221)
plt.scatter(X[:, 0], X[:, 1])
plt.title("Original Point Cloud (%i Points)" % (X.shape[0]))
plt.axis("equal")
plt.subplot(222)
plt.scatter(X[idx_perm, 0], X[idx_perm, 1])
plt.title("Subsampled Cloud (%i Points)" % (idx_perm.size))
plt.axis("equal")
plt.subplot(223)
plot_diagrams(dgms_full)
plt.title("Original point cloud diagrams")
plt.subplot(224)
plot_diagrams(dgms_sub)
plt.title("Subsampled point diagrams")
plt.tight_layout()
plt.show()
出力は次のとおりです。