Ripser.py の学習 (9): 貪欲な順列

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()

出力は次のとおりです。

おすすめ

転載: blog.csdn.net/weixin_44575152/article/details/129702780